<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />

<title>project_4_starter</title>

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>



<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.fa-pull-left {
  float: left;
}
.fa-pull-right {
  float: right;
}
.fa.fa-pull-left {
  margin-right: .3em;
}
.fa.fa-pull-right {
  margin-left: .3em;
}
/* Deprecated as of 4.4.0 */
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
.fa-pulse {
  -webkit-animation: fa-spin 1s infinite steps(8);
  animation: fa-spin 1s infinite steps(8);
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook-f:before,
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-feed:before,
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before,
.fa-gratipay:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper-pp:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-resistance:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-y-combinator-square:before,
.fa-yc-square:before,
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
.fa-buysellads:before {
  content: "\f20d";
}
.fa-connectdevelop:before {
  content: "\f20e";
}
.fa-dashcube:before {
  content: "\f210";
}
.fa-forumbee:before {
  content: "\f211";
}
.fa-leanpub:before {
  content: "\f212";
}
.fa-sellsy:before {
  content: "\f213";
}
.fa-shirtsinbulk:before {
  content: "\f214";
}
.fa-simplybuilt:before {
  content: "\f215";
}
.fa-skyatlas:before {
  content: "\f216";
}
.fa-cart-plus:before {
  content: "\f217";
}
.fa-cart-arrow-down:before {
  content: "\f218";
}
.fa-diamond:before {
  content: "\f219";
}
.fa-ship:before {
  content: "\f21a";
}
.fa-user-secret:before {
  content: "\f21b";
}
.fa-motorcycle:before {
  content: "\f21c";
}
.fa-street-view:before {
  content: "\f21d";
}
.fa-heartbeat:before {
  content: "\f21e";
}
.fa-venus:before {
  content: "\f221";
}
.fa-mars:before {
  content: "\f222";
}
.fa-mercury:before {
  content: "\f223";
}
.fa-intersex:before,
.fa-transgender:before {
  content: "\f224";
}
.fa-transgender-alt:before {
  content: "\f225";
}
.fa-venus-double:before {
  content: "\f226";
}
.fa-mars-double:before {
  content: "\f227";
}
.fa-venus-mars:before {
  content: "\f228";
}
.fa-mars-stroke:before {
  content: "\f229";
}
.fa-mars-stroke-v:before {
  content: "\f22a";
}
.fa-mars-stroke-h:before {
  content: "\f22b";
}
.fa-neuter:before {
  content: "\f22c";
}
.fa-genderless:before {
  content: "\f22d";
}
.fa-facebook-official:before {
  content: "\f230";
}
.fa-pinterest-p:before {
  content: "\f231";
}
.fa-whatsapp:before {
  content: "\f232";
}
.fa-server:before {
  content: "\f233";
}
.fa-user-plus:before {
  content: "\f234";
}
.fa-user-times:before {
  content: "\f235";
}
.fa-hotel:before,
.fa-bed:before {
  content: "\f236";
}
.fa-viacoin:before {
  content: "\f237";
}
.fa-train:before {
  content: "\f238";
}
.fa-subway:before {
  content: "\f239";
}
.fa-medium:before {
  content: "\f23a";
}
.fa-yc:before,
.fa-y-combinator:before {
  content: "\f23b";
}
.fa-optin-monster:before {
  content: "\f23c";
}
.fa-opencart:before {
  content: "\f23d";
}
.fa-expeditedssl:before {
  content: "\f23e";
}
.fa-battery-4:before,
.fa-battery:before,
.fa-battery-full:before {
  content: "\f240";
}
.fa-battery-3:before,
.fa-battery-three-quarters:before {
  content: "\f241";
}
.fa-battery-2:before,
.fa-battery-half:before {
  content: "\f242";
}
.fa-battery-1:before,
.fa-battery-quarter:before {
  content: "\f243";
}
.fa-battery-0:before,
.fa-battery-empty:before {
  content: "\f244";
}
.fa-mouse-pointer:before {
  content: "\f245";
}
.fa-i-cursor:before {
  content: "\f246";
}
.fa-object-group:before {
  content: "\f247";
}
.fa-object-ungroup:before {
  content: "\f248";
}
.fa-sticky-note:before {
  content: "\f249";
}
.fa-sticky-note-o:before {
  content: "\f24a";
}
.fa-cc-jcb:before {
  content: "\f24b";
}
.fa-cc-diners-club:before {
  content: "\f24c";
}
.fa-clone:before {
  content: "\f24d";
}
.fa-balance-scale:before {
  content: "\f24e";
}
.fa-hourglass-o:before {
  content: "\f250";
}
.fa-hourglass-1:before,
.fa-hourglass-start:before {
  content: "\f251";
}
.fa-hourglass-2:before,
.fa-hourglass-half:before {
  content: "\f252";
}
.fa-hourglass-3:before,
.fa-hourglass-end:before {
  content: "\f253";
}
.fa-hourglass:before {
  content: "\f254";
}
.fa-hand-grab-o:before,
.fa-hand-rock-o:before {
  content: "\f255";
}
.fa-hand-stop-o:before,
.fa-hand-paper-o:before {
  content: "\f256";
}
.fa-hand-scissors-o:before {
  content: "\f257";
}
.fa-hand-lizard-o:before {
  content: "\f258";
}
.fa-hand-spock-o:before {
  content: "\f259";
}
.fa-hand-pointer-o:before {
  content: "\f25a";
}
.fa-hand-peace-o:before {
  content: "\f25b";
}
.fa-trademark:before {
  content: "\f25c";
}
.fa-registered:before {
  content: "\f25d";
}
.fa-creative-commons:before {
  content: "\f25e";
}
.fa-gg:before {
  content: "\f260";
}
.fa-gg-circle:before {
  content: "\f261";
}
.fa-tripadvisor:before {
  content: "\f262";
}
.fa-odnoklassniki:before {
  content: "\f263";
}
.fa-odnoklassniki-square:before {
  content: "\f264";
}
.fa-get-pocket:before {
  content: "\f265";
}
.fa-wikipedia-w:before {
  content: "\f266";
}
.fa-safari:before {
  content: "\f267";
}
.fa-chrome:before {
  content: "\f268";
}
.fa-firefox:before {
  content: "\f269";
}
.fa-opera:before {
  content: "\f26a";
}
.fa-internet-explorer:before {
  content: "\f26b";
}
.fa-tv:before,
.fa-television:before {
  content: "\f26c";
}
.fa-contao:before {
  content: "\f26d";
}
.fa-500px:before {
  content: "\f26e";
}
.fa-amazon:before {
  content: "\f270";
}
.fa-calendar-plus-o:before {
  content: "\f271";
}
.fa-calendar-minus-o:before {
  content: "\f272";
}
.fa-calendar-times-o:before {
  content: "\f273";
}
.fa-calendar-check-o:before {
  content: "\f274";
}
.fa-industry:before {
  content: "\f275";
}
.fa-map-pin:before {
  content: "\f276";
}
.fa-map-signs:before {
  content: "\f277";
}
.fa-map-o:before {
  content: "\f278";
}
.fa-map:before {
  content: "\f279";
}
.fa-commenting:before {
  content: "\f27a";
}
.fa-commenting-o:before {
  content: "\f27b";
}
.fa-houzz:before {
  content: "\f27c";
}
.fa-vimeo:before {
  content: "\f27d";
}
.fa-black-tie:before {
  content: "\f27e";
}
.fa-fonticons:before {
  content: "\f280";
}
.fa-reddit-alien:before {
  content: "\f281";
}
.fa-edge:before {
  content: "\f282";
}
.fa-credit-card-alt:before {
  content: "\f283";
}
.fa-codiepie:before {
  content: "\f284";
}
.fa-modx:before {
  content: "\f285";
}
.fa-fort-awesome:before {
  content: "\f286";
}
.fa-usb:before {
  content: "\f287";
}
.fa-product-hunt:before {
  content: "\f288";
}
.fa-mixcloud:before {
  content: "\f289";
}
.fa-scribd:before {
  content: "\f28a";
}
.fa-pause-circle:before {
  content: "\f28b";
}
.fa-pause-circle-o:before {
  content: "\f28c";
}
.fa-stop-circle:before {
  content: "\f28d";
}
.fa-stop-circle-o:before {
  content: "\f28e";
}
.fa-shopping-bag:before {
  content: "\f290";
}
.fa-shopping-basket:before {
  content: "\f291";
}
.fa-hashtag:before {
  content: "\f292";
}
.fa-bluetooth:before {
  content: "\f293";
}
.fa-bluetooth-b:before {
  content: "\f294";
}
.fa-percent:before {
  content: "\f295";
}
.fa-gitlab:before {
  content: "\f296";
}
.fa-wpbeginner:before {
  content: "\f297";
}
.fa-wpforms:before {
  content: "\f298";
}
.fa-envira:before {
  content: "\f299";
}
.fa-universal-access:before {
  content: "\f29a";
}
.fa-wheelchair-alt:before {
  content: "\f29b";
}
.fa-question-circle-o:before {
  content: "\f29c";
}
.fa-blind:before {
  content: "\f29d";
}
.fa-audio-description:before {
  content: "\f29e";
}
.fa-volume-control-phone:before {
  content: "\f2a0";
}
.fa-braille:before {
  content: "\f2a1";
}
.fa-assistive-listening-systems:before {
  content: "\f2a2";
}
.fa-asl-interpreting:before,
.fa-american-sign-language-interpreting:before {
  content: "\f2a3";
}
.fa-deafness:before,
.fa-hard-of-hearing:before,
.fa-deaf:before {
  content: "\f2a4";
}
.fa-glide:before {
  content: "\f2a5";
}
.fa-glide-g:before {
  content: "\f2a6";
}
.fa-signing:before,
.fa-sign-language:before {
  content: "\f2a7";
}
.fa-low-vision:before {
  content: "\f2a8";
}
.fa-viadeo:before {
  content: "\f2a9";
}
.fa-viadeo-square:before {
  content: "\f2aa";
}
.fa-snapchat:before {
  content: "\f2ab";
}
.fa-snapchat-ghost:before {
  content: "\f2ac";
}
.fa-snapchat-square:before {
  content: "\f2ad";
}
.fa-pied-piper:before {
  content: "\f2ae";
}
.fa-first-order:before {
  content: "\f2b0";
}
.fa-yoast:before {
  content: "\f2b1";
}
.fa-themeisle:before {
  content: "\f2b2";
}
.fa-google-plus-circle:before,
.fa-google-plus-official:before {
  content: "\f2b3";
}
.fa-fa:before,
.fa-font-awesome:before {
  content: "\f2b4";
}
.fa-handshake-o:before {
  content: "\f2b5";
}
.fa-envelope-open:before {
  content: "\f2b6";
}
.fa-envelope-open-o:before {
  content: "\f2b7";
}
.fa-linode:before {
  content: "\f2b8";
}
.fa-address-book:before {
  content: "\f2b9";
}
.fa-address-book-o:before {
  content: "\f2ba";
}
.fa-vcard:before,
.fa-address-card:before {
  content: "\f2bb";
}
.fa-vcard-o:before,
.fa-address-card-o:before {
  content: "\f2bc";
}
.fa-user-circle:before {
  content: "\f2bd";
}
.fa-user-circle-o:before {
  content: "\f2be";
}
.fa-user-o:before {
  content: "\f2c0";
}
.fa-id-badge:before {
  content: "\f2c1";
}
.fa-drivers-license:before,
.fa-id-card:before {
  content: "\f2c2";
}
.fa-drivers-license-o:before,
.fa-id-card-o:before {
  content: "\f2c3";
}
.fa-quora:before {
  content: "\f2c4";
}
.fa-free-code-camp:before {
  content: "\f2c5";
}
.fa-telegram:before {
  content: "\f2c6";
}
.fa-thermometer-4:before,
.fa-thermometer:before,
.fa-thermometer-full:before {
  content: "\f2c7";
}
.fa-thermometer-3:before,
.fa-thermometer-three-quarters:before {
  content: "\f2c8";
}
.fa-thermometer-2:before,
.fa-thermometer-half:before {
  content: "\f2c9";
}
.fa-thermometer-1:before,
.fa-thermometer-quarter:before {
  content: "\f2ca";
}
.fa-thermometer-0:before,
.fa-thermometer-empty:before {
  content: "\f2cb";
}
.fa-shower:before {
  content: "\f2cc";
}
.fa-bathtub:before,
.fa-s15:before,
.fa-bath:before {
  content: "\f2cd";
}
.fa-podcast:before {
  content: "\f2ce";
}
.fa-window-maximize:before {
  content: "\f2d0";
}
.fa-window-minimize:before {
  content: "\f2d1";
}
.fa-window-restore:before {
  content: "\f2d2";
}
.fa-times-rectangle:before,
.fa-window-close:before {
  content: "\f2d3";
}
.fa-times-rectangle-o:before,
.fa-window-close-o:before {
  content: "\f2d4";
}
.fa-bandcamp:before {
  content: "\f2d5";
}
.fa-grav:before {
  content: "\f2d6";
}
.fa-etsy:before {
  content: "\f2d7";
}
.fa-imdb:before {
  content: "\f2d8";
}
.fa-ravelry:before {
  content: "\f2d9";
}
.fa-eercast:before {
  content: "\f2da";
}
.fa-microchip:before {
  content: "\f2db";
}
.fa-snowflake-o:before {
  content: "\f2dc";
}
.fa-superpowers:before {
  content: "\f2dd";
}
.fa-wpexplorer:before {
  content: "\f2de";
}
.fa-meetup:before {
  content: "\f2e0";
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
div.traceback-wrapper pre.traceback {
  max-height: 600px;
  overflow: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  padding: 5px;
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
[dir="rtl"] #ipython_notebook {
  margin-right: 10px;
  margin-left: 0;
}
[dir="rtl"] #ipython_notebook.pull-left {
  float: right !important;
  float: right;
}
.flex-spacer {
  flex: 1;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#kernel_logo_widget {
  margin: 0 10px;
}
span#login_widget {
  float: right;
}
[dir="rtl"] span#login_widget {
  float: left;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
.modal-header {
  cursor: move;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
[dir="rtl"] .center-nav form.pull-left {
  float: right !important;
  float: right;
}
[dir="rtl"] .center-nav .navbar-text {
  float: right;
}
[dir="rtl"] .navbar-inner {
  text-align: right;
}
[dir="rtl"] div.text-left {
  text-align: right;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  position: absolute;
  display: block;
  width: 100%;
  height: 100%;
  overflow: hidden;
  cursor: pointer;
  opacity: 0;
  z-index: 2;
}
.alternate_upload .btn-xs > input.fileinput {
  margin: -1px -5px;
}
.alternate_upload .btn-upload {
  position: relative;
  height: 22px;
}
::-webkit-file-upload-button {
  cursor: pointer;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
ul#tabs {
  margin-bottom: 4px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
[dir="rtl"] ul#tabs.nav-tabs > li {
  float: right;
}
[dir="rtl"] ul#tabs.nav.nav-tabs {
  padding-right: 0;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons .pull-right {
  float: left !important;
  float: left;
}
[dir="rtl"] .list_toolbar .col-sm-4,
[dir="rtl"] .list_toolbar .col-sm-8 {
  float: right;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: text-bottom;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
[dir="rtl"] .list_item > div input {
  margin-right: 0;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_modified {
  margin-right: 7px;
  margin-left: 7px;
}
[dir="rtl"] .item_modified.pull-right {
  float: left !important;
  float: left;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
[dir="rtl"] .item_buttons.pull-right {
  float: left !important;
  float: left;
}
[dir="rtl"] .item_buttons .kernel-name {
  margin-left: 7px;
  float: right;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
.sort_button {
  display: inline-block;
  padding-left: 7px;
}
[dir="rtl"] .sort_button.pull-right {
  float: left !important;
  float: left;
}
#tree-selector {
  padding-right: 0px;
}
#button-select-all {
  min-width: 50px;
}
[dir="rtl"] #button-select-all.btn {
  float: right ;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
  margin-top: 2px;
  height: 16px;
}
[dir="rtl"] #select-all.pull-left {
  float: right !important;
  float: right;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.fa-pull-left {
  margin-right: .3em;
}
.folder_icon:before.fa-pull-right {
  margin-left: .3em;
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.fa-pull-left {
  margin-right: .3em;
}
.notebook_icon:before.fa-pull-right {
  margin-left: .3em;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.fa-pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.fa-pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.fa-pull-left {
  margin-right: .3em;
}
.file_icon:before.fa-pull-right {
  margin-left: .3em;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
#new-menu .dropdown-header {
  font-size: 10px;
  border-bottom: 1px solid #e5e5e5;
  padding: 0 0 3px;
  margin: -3px 20px 0;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.move-button {
  display: none;
}
.download-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.fa-pull-left {
  margin-right: .3em;
}
.dirty-indicator.fa-pull-right {
  margin-left: .3em;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.fa-pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.fa-pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.fa-pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.fa-pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.fa-pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.fa-pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
.CodeMirror-dialog {
  background-color: #fff;
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI escape sequences */
/* The color values are a mix of
   http://www.xcolors.net/dl/baskerville-ivorylight and
   http://www.xcolors.net/dl/euphrasia */
.ansi-black-fg {
  color: #3E424D;
}
.ansi-black-bg {
  background-color: #3E424D;
}
.ansi-black-intense-fg {
  color: #282C36;
}
.ansi-black-intense-bg {
  background-color: #282C36;
}
.ansi-red-fg {
  color: #E75C58;
}
.ansi-red-bg {
  background-color: #E75C58;
}
.ansi-red-intense-fg {
  color: #B22B31;
}
.ansi-red-intense-bg {
  background-color: #B22B31;
}
.ansi-green-fg {
  color: #00A250;
}
.ansi-green-bg {
  background-color: #00A250;
}
.ansi-green-intense-fg {
  color: #007427;
}
.ansi-green-intense-bg {
  background-color: #007427;
}
.ansi-yellow-fg {
  color: #DDB62B;
}
.ansi-yellow-bg {
  background-color: #DDB62B;
}
.ansi-yellow-intense-fg {
  color: #B27D12;
}
.ansi-yellow-intense-bg {
  background-color: #B27D12;
}
.ansi-blue-fg {
  color: #208FFB;
}
.ansi-blue-bg {
  background-color: #208FFB;
}
.ansi-blue-intense-fg {
  color: #0065CA;
}
.ansi-blue-intense-bg {
  background-color: #0065CA;
}
.ansi-magenta-fg {
  color: #D160C4;
}
.ansi-magenta-bg {
  background-color: #D160C4;
}
.ansi-magenta-intense-fg {
  color: #A03196;
}
.ansi-magenta-intense-bg {
  background-color: #A03196;
}
.ansi-cyan-fg {
  color: #60C6C8;
}
.ansi-cyan-bg {
  background-color: #60C6C8;
}
.ansi-cyan-intense-fg {
  color: #258F8F;
}
.ansi-cyan-intense-bg {
  background-color: #258F8F;
}
.ansi-white-fg {
  color: #C5C1B4;
}
.ansi-white-bg {
  background-color: #C5C1B4;
}
.ansi-white-intense-fg {
  color: #A1A6B2;
}
.ansi-white-intense-bg {
  background-color: #A1A6B2;
}
.ansi-default-inverse-fg {
  color: #FFFFFF;
}
.ansi-default-inverse-bg {
  background-color: #000000;
}
.ansi-bold {
  font-weight: bold;
}
.ansi-underline {
  text-decoration: underline;
}
/* The following styles are deprecated an will be removed in a future version */
.ansibold {
  font-weight: bold;
}
.ansi-inverse {
  outline: 0.5px dotted;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  position: relative;
  overflow: visible;
}
div.cell:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: transparent;
}
div.cell.jupyter-soft-selected {
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected,
div.cell.selected.jupyter-soft-selected {
  border-color: #ababab;
}
div.cell.selected:before,
div.cell.selected.jupyter-soft-selected:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: #42A5F5;
}
@media print {
  div.cell.selected,
  div.cell.selected.jupyter-soft-selected {
    border-color: transparent;
  }
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
}
.edit_mode div.cell.selected:before {
  position: absolute;
  display: block;
  top: -1px;
  left: -1px;
  width: 5px;
  height: calc(100% +  2px);
  content: '';
  background: #66BB6A;
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  /* Note that this should set vertical padding only, since CodeMirror assumes
       that horizontal padding will be set on CodeMirror pre */
  padding: 0.4em 0;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. This sets horizontal padding only,
    use .CodeMirror-lines for vertical */
  padding: 0 0.4em;
  border: 0;
  border-radius: 0;
}
.CodeMirror-cursor {
  border-left: 1.4px solid black;
}
@media screen and (min-width: 2138px) and (max-width: 4319px) {
  .CodeMirror-cursor {
    border-left: 2px solid black;
  }
}
@media screen and (min-width: 4320px) {
  .CodeMirror-cursor {
    border-left: 4px solid black;
  }
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url();
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
div.output_area .mglyph > img {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 1px 0 1px 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul:not(.list-inline),
.rendered_html ol:not(.list-inline) {
  padding-left: 2em;
}
.rendered_html ul {
  list-style: disc;
}
.rendered_html ul ul {
  list-style: square;
  margin-top: 0;
}
.rendered_html ul ul ul {
  list-style: circle;
}
.rendered_html ol {
  list-style: decimal;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin-top: 0;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
  padding: 0px;
  background-color: #fff;
}
.rendered_html code {
  background-color: #eff0f1;
}
.rendered_html p code {
  padding: 1px 5px;
}
.rendered_html pre code {
  background-color: #fff;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  color: #000;
  font-size: 100%;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: none;
  border-collapse: collapse;
  border-spacing: 0;
  color: black;
  font-size: 12px;
  table-layout: fixed;
}
.rendered_html thead {
  border-bottom: 1px solid black;
  vertical-align: bottom;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  text-align: right;
  vertical-align: middle;
  padding: 0.5em 0.5em;
  line-height: normal;
  white-space: normal;
  max-width: none;
  border: none;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html tbody tr:nth-child(odd) {
  background: #f5f5f5;
}
.rendered_html tbody tr:hover {
  background: rgba(66, 165, 245, 0.2);
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
.rendered_html .alert {
  margin-bottom: initial;
}
.rendered_html * + .alert {
  margin-top: 1em;
}
[dir="rtl"] .rendered_html p {
  text-align: right;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.rendered .rendered_html tr,
.text_cell.rendered .rendered_html th,
.text_cell.rendered .rendered_html td {
  max-width: none;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.text_cell .dropzone .input_area {
  border: 2px dashed #bababa;
  margin: -1px;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
.jupyter-keybindings {
  padding: 1px;
  line-height: 24px;
  border-bottom: 1px solid gray;
}
.jupyter-keybindings input {
  margin: 0;
  padding: 0;
  border: none;
}
.jupyter-keybindings i {
  padding: 6px;
}
.well code {
  background-color: #ffffff;
  border-color: #ababab;
  border-width: 1px;
  border-style: solid;
  padding: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.tags_button_container {
  width: 100%;
  display: flex;
}
.tag-container {
  display: flex;
  flex-direction: row;
  flex-grow: 1;
  overflow: hidden;
  position: relative;
}
.tag-container > * {
  margin: 0 4px;
}
.remove-tag-btn {
  margin-left: 4px;
}
.tags-input {
  display: flex;
}
.cell-tag:last-child:after {
  content: "";
  position: absolute;
  right: 0;
  width: 40px;
  height: 100%;
  /* Fade to background color of cell toolbar */
  background: linear-gradient(to right, rgba(0, 0, 0, 0), #EEE);
}
.tags-input > * {
  margin-left: 4px;
}
.cell-tag,
.tags-input input,
.tags-input button {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  box-shadow: none;
  width: inherit;
  font-size: inherit;
  height: 22px;
  line-height: 22px;
  padding: 0px 4px;
  display: inline-block;
}
.cell-tag:focus,
.tags-input input:focus,
.tags-input button:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.cell-tag::-moz-placeholder,
.tags-input input::-moz-placeholder,
.tags-input button::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.cell-tag:-ms-input-placeholder,
.tags-input input:-ms-input-placeholder,
.tags-input button:-ms-input-placeholder {
  color: #999;
}
.cell-tag::-webkit-input-placeholder,
.tags-input input::-webkit-input-placeholder,
.tags-input button::-webkit-input-placeholder {
  color: #999;
}
.cell-tag::-ms-expand,
.tags-input input::-ms-expand,
.tags-input button::-ms-expand {
  border: 0;
  background-color: transparent;
}
.cell-tag[disabled],
.tags-input input[disabled],
.tags-input button[disabled],
.cell-tag[readonly],
.tags-input input[readonly],
.tags-input button[readonly],
fieldset[disabled] .cell-tag,
fieldset[disabled] .tags-input input,
fieldset[disabled] .tags-input button {
  background-color: #eeeeee;
  opacity: 1;
}
.cell-tag[disabled],
.tags-input input[disabled],
.tags-input button[disabled],
fieldset[disabled] .cell-tag,
fieldset[disabled] .tags-input input,
fieldset[disabled] .tags-input button {
  cursor: not-allowed;
}
textarea.cell-tag,
textarea.tags-input input,
textarea.tags-input button {
  height: auto;
}
select.cell-tag,
select.tags-input input,
select.tags-input button {
  height: 30px;
  line-height: 30px;
}
textarea.cell-tag,
textarea.tags-input input,
textarea.tags-input button,
select[multiple].cell-tag,
select[multiple].tags-input input,
select[multiple].tags-input button {
  height: auto;
}
.cell-tag,
.tags-input button {
  padding: 0px 4px;
}
.cell-tag {
  background-color: #fff;
  white-space: nowrap;
}
.tags-input input[type=text]:focus {
  outline: none;
  box-shadow: none;
  border-color: #ccc;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
[dir="rtl"] #kernel_logo_widget {
  float: left !important;
  float: left;
}
.modal .modal-body .move-path {
  display: flex;
  flex-direction: row;
  justify-content: space;
  align-items: center;
}
.modal .modal-body .move-path .server-root {
  padding-right: 20px;
}
.modal .modal-body .move-path .path-input {
  flex: 1;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
[dir="rtl"] #menubar .navbar-toggle {
  float: right;
}
[dir="rtl"] #menubar .navbar-collapse {
  clear: right;
}
[dir="rtl"] #menubar .navbar-nav {
  float: right;
}
[dir="rtl"] #menubar .nav {
  padding-right: 0px;
}
[dir="rtl"] #menubar .navbar-nav > li {
  float: right;
}
[dir="rtl"] #menubar .navbar-right {
  float: left !important;
}
[dir="rtl"] ul.dropdown-menu {
  text-align: right;
  left: auto;
}
[dir="rtl"] ul#new-menu.dropdown-menu {
  right: auto;
  left: 0;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
[dir="rtl"] i.menu-icon.pull-right {
  float: left !important;
  float: left;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
[dir="rtl"] ul#help_menu li a {
  padding-left: 2.2em;
}
[dir="rtl"] ul#help_menu li a i {
  margin-right: 0;
  margin-left: -1.2em;
}
[dir="rtl"] ul#help_menu li a i.pull-right {
  float: left !important;
  float: left;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
[dir="rtl"] .dropdown-submenu > .dropdown-menu {
  right: 100%;
  margin-right: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.fa-pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.fa-pull-right {
  margin-left: .3em;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
[dir="rtl"] .dropdown-submenu > a:after {
  float: left;
  content: "\f0d9";
  margin-right: 0;
  margin-left: -10px;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
[dir="rtl"] #notification_area {
  float: left !important;
  float: left;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
[dir="rtl"] .indicator_area {
  float: left !important;
  float: left;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
[dir="rtl"] #kernel_indicator {
  float: left !important;
  float: left;
  border-left: 0;
  border-right: 1px solid;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
[dir="rtl"] #modal_indicator {
  float: left !important;
  float: left;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.fa-pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.fa-pull-right {
  margin-left: .3em;
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.fa-pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.fa-pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.fa-pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.fa-pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.fa-pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.fa-pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.fa-pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.fa-pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.fa-pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.fa-pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  height: 30px;
  margin-top: 4px;
  display: flex;
  justify-content: flex-start;
  align-items: baseline;
  width: 50%;
  flex: 1;
}
span.save_widget span.filename {
  height: 100%;
  line-height: 1em;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
[dir="rtl"] span.save_widget.pull-left {
  float: right !important;
  float: right;
}
[dir="rtl"] span.save_widget span.filename {
  margin-left: 0;
  margin-right: 16px;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
  white-space: nowrap;
  padding: 0 5px;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
    padding: 0 0 0 5px;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
.toolbar-btn-label {
  margin-left: 6px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
[dir="rtl"] .btn-group > .btn,
.btn-group-vertical > .btn {
  float: right;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
[dir="rtl"] ul.typeahead-list i {
  margin-left: 0;
  margin-right: -10px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
ul.typeahead-list  > li > a.pull-right {
  float: left !important;
  float: left;
}
[dir="rtl"] .typeahead-list {
  text-align: right;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  min-width: 20px;
  color: transparent;
}
[dir="rtl"] .no-shortcut.pull-right {
  float: left !important;
  float: left;
}
[dir="rtl"] .command-shortcut.pull-right {
  float: left !important;
  float: left;
}
.command-shortcut:before {
  content: "(command mode)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
[dir="rtl"] .edit-shortcut.pull-right {
  float: left !important;
  float: left;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
[dir="ltr"] #find-and-replace .input-group-btn + .form-control {
  border-left: none;
}
[dir="rtl"] #find-and-replace .input-group-btn + .form-control {
  border-right: none;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>
<style type="text/css">
    body[data-notebook-name] > #header #header-container:not(.show-panel), /* body has data-notebook-name attribute when 
a notebook is open. this rule won't be applied when the notebook is not open (in 404 view for example) */
body[data-notebook-name] #menubar-container #maintoolbar:not(.show-panel),
body[data-notebook-name] #menubar-container ul.navbar-nav:not(.show-panel) {
  display: none;
}

#menubar.only-panel #menus.navbar-default {
    background: #fff;
    border-color: #fff;
}

.toolbar.with-statusbar{
    margin-top: 3px;
    margin-bottom: 0;
}

    </style>


<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>

<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">

<!-- Loading mathjax macro -->
<!-- Load mathjax -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
    <!-- MathJax configuration -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        "HTML-CSS": {
            styles: {'.MathJax_Display': {"margin": 0}},
            linebreaks: { automatic: true }
        }
    });
    </script>
    <!-- End of mathjax configuration --></head>
<body>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Project-4:-Multi-factor-Model">Project 4: Multi-factor Model<a class="anchor-link" href="#Project-4:-Multi-factor-Model">&#182;</a></h1><h2 id="Instructions">Instructions<a class="anchor-link" href="#Instructions">&#182;</a></h2><p>Each problem consists of a function to implement and instructions on how to implement the function.  The parts of the function that need to be implemented are marked with a <code># TODO</code> comment. After implementing the function, run the cell to test it against the unit tests we've provided. For each problem, we provide one or more unit tests from our <code>project_tests</code> package. These unit tests won't tell you if your answer is correct, but will warn you of any major errors. Your code will be checked for the correct solution when you submit it to Udacity.</p>
<h2 id="Packages">Packages<a class="anchor-link" href="#Packages">&#182;</a></h2><p>When you implement the functions, you'll only need to you use the packages you've used in the classroom, like <a href="https://pandas.pydata.org/">Pandas</a> and <a href="http://www.numpy.org/">Numpy</a>. These packages will be imported for you. We recommend you don't add any import statements, otherwise the grader might not be able to run your code.</p>
<p>The other packages that we're importing are <code>project_helper</code> and <code>project_tests</code>. These are custom packages built to help you solve the problems.  The <code>project_helper</code> module contains utility functions and graph functions. The <code>project_tests</code> contains the unit tests for all the problems.</p>
<h3 id="Install-Packages">Install Packages<a class="anchor-link" href="#Install-Packages">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
<span class="o">!{</span>sys.executable<span class="o">}</span> -m pip install -r requirements.txt
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Collecting alphalens==0.3.2 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/a5/dc/2f9cd107d0d4cf6223d37d81ddfbbdbf0d703d03669b83810fa6b97f32e5/alphalens-0.3.2.tar.gz (18.9MB)
    100% |████████████████████████████████| 18.9MB 24kB/s  eta 0:00:01    29% |█████████▍                      | 5.5MB 36.5MB/s eta 0:00:01    56% |██████████████████              | 10.6MB 34.2MB/s eta 0:00:01    64% |████████████████████▊           | 12.2MB 37.5MB/s eta 0:00:01    82% |██████████████████████████▎     | 15.5MB 34.0MB/s eta 0:00:01    98% |███████████████████████████████▋| 18.6MB 30.6MB/s eta 0:00:01
Requirement already satisfied: colour==0.1.5 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 2))
Collecting cvxpy==1.0.3 (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/a1/59/2613468ffbbe3a818934d06b81b9f4877fe054afbf4f99d2f43f398a0b34/cvxpy-1.0.3.tar.gz (880kB)
    100% |████████████████████████████████| 880kB 517kB/s eta 0:00:01
Requirement already satisfied: cycler==0.10.0 in /opt/conda/lib/python3.6/site-packages/cycler-0.10.0-py3.6.egg (from -r requirements.txt (line 4))
Collecting numpy==1.13.3 (from -r requirements.txt (line 5))
  Downloading https://files.pythonhosted.org/packages/57/a7/e3e6bd9d595125e1abbe162e323fd2d06f6f6683185294b79cd2cdb190d5/numpy-1.13.3-cp36-cp36m-manylinux1_x86_64.whl (17.0MB)
    100% |████████████████████████████████| 17.0MB 26kB/s  eta 0:00:01   26% |████████▌                       | 4.5MB 32.3MB/s eta 0:00:01    35% |███████████▎                    | 6.0MB 32.5MB/s eta 0:00:01    76% |████████████████████████▌       | 13.0MB 31.6MB/s eta 0:00:01    85% |███████████████████████████▏    | 14.4MB 29.9MB/s eta 0:00:01
Collecting pandas==0.18.1 (from -r requirements.txt (line 6))
  Downloading https://files.pythonhosted.org/packages/11/09/e66eb844daba8680ddff26335d5b4fead77f60f957678243549a8dd4830d/pandas-0.18.1.tar.gz (7.3MB)
    100% |████████████████████████████████| 7.3MB 64kB/s  eta 0:00:01    65% |█████████████████████           | 4.8MB 29.4MB/s eta 0:00:01
Collecting plotly==2.2.3 (from -r requirements.txt (line 7))
  Downloading https://files.pythonhosted.org/packages/99/a6/8214b6564bf4ace9bec8a26e7f89832792be582c042c47c912d3201328a0/plotly-2.2.3.tar.gz (1.1MB)
    100% |████████████████████████████████| 1.1MB 418kB/s eta 0:00:01
Requirement already satisfied: pyparsing==2.2.0 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 8))
Requirement already satisfied: python-dateutil==2.6.1 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 9))
Requirement already satisfied: pytz==2017.3 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 10))
Requirement already satisfied: requests==2.18.4 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 11))
Collecting scipy==1.0.0 (from -r requirements.txt (line 12))
  Downloading https://files.pythonhosted.org/packages/d8/5e/caa01ba7be11600b6a9d39265440d7b3be3d69206da887c42bef049521f2/scipy-1.0.0-cp36-cp36m-manylinux1_x86_64.whl (50.0MB)
    100% |████████████████████████████████| 50.0MB 9.0kB/s eta 0:00:01   12% |████                            | 6.1MB 28.8MB/s eta 0:00:02    19% |██████▏                         | 9.7MB 22.1MB/s eta 0:00:02    24% |███████▊                        | 12.0MB 25.5MB/s eta 0:00:02    31% |██████████                      | 15.6MB 23.1MB/s eta 0:00:02    40% |█████████████                   | 20.3MB 21.5MB/s eta 0:00:02    45% |██████████████▌                 | 22.6MB 25.4MB/s eta 0:00:02    47% |███████████████▎                | 23.9MB 25.2MB/s eta 0:00:02    49% |████████████████                | 24.9MB 25.9MB/s eta 0:00:01    52% |████████████████▊               | 26.1MB 18.7MB/s eta 0:00:02    56% |██████████████████              | 28.3MB 24.3MB/s eta 0:00:01    59% |███████████████████             | 29.6MB 26.6MB/s eta 0:00:01    69% |██████████████████████▏         | 34.7MB 22.1MB/s eta 0:00:01    76% |████████████████████████▍       | 38.1MB 24.0MB/s eta 0:00:01    78% |█████████████████████████       | 39.2MB 25.5MB/s eta 0:00:01    80% |█████████████████████████▉      | 40.5MB 27.3MB/s eta 0:00:01    85% |███████████████████████████▍    | 42.8MB 32.6MB/s eta 0:00:01    90% |████████████████████████████▉   | 45.0MB 25.0MB/s eta 0:00:01    92% |█████████████████████████████▋  | 46.3MB 23.5MB/s eta 0:00:01    94% |██████████████████████████████▍ | 47.4MB 31.4MB/s eta 0:00:01    97% |███████████████████████████████▏| 48.8MB 29.2MB/s eta 0:00:01
Requirement already satisfied: scikit-learn==0.19.1 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 13))
Requirement already satisfied: six==1.11.0 in /opt/conda/lib/python3.6/site-packages (from -r requirements.txt (line 14))
Collecting tqdm==4.19.5 (from -r requirements.txt (line 15))
  Downloading https://files.pythonhosted.org/packages/71/3c/341b4fa23cb3abc335207dba057c790f3bb329f6757e1fcd5d347bcf8308/tqdm-4.19.5-py2.py3-none-any.whl (51kB)
    100% |████████████████████████████████| 61kB 4.0MB/s eta 0:00:01
Collecting zipline===1.2.0 (from -r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/15/d3/689f2a940478b82ac57c751a40460598221fd82b0449a7a8f7eef47a3bcc/zipline-1.2.0.tar.gz (659kB)
    100% |████████████████████████████████| 665kB 700kB/s eta 0:00:01
Requirement already satisfied: matplotlib&gt;=1.4.0 in /opt/conda/lib/python3.6/site-packages (from alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: seaborn&gt;=0.6.0 in /opt/conda/lib/python3.6/site-packages (from alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: statsmodels&gt;=0.6.1 in /opt/conda/lib/python3.6/site-packages (from alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: IPython&gt;=3.2.3 in /opt/conda/lib/python3.6/site-packages (from alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Collecting osqp (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/c0/01/8becb29b0d38e0c40eab9e3d54aa8138fa62a010d519caf65e9210021bd3/osqp-0.5.0-cp36-cp36m-manylinux1_x86_64.whl (147kB)
    100% |████████████████████████████████| 153kB 2.6MB/s eta 0:00:01
Collecting ecos&gt;=2 (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/55/ed/d131ff51f3a8f73420eb1191345eb49f269f23cadef515172e356018cde3/ecos-2.0.7.post1-cp36-cp36m-manylinux1_x86_64.whl (147kB)
    100% |████████████████████████████████| 153kB 2.5MB/s eta 0:00:01
Collecting scs&gt;=1.1.3 (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/b3/fd/6e01c4f4a69fcc6c3db130ba55572089e78e77ea8c0921a679f9da1ec04c/scs-2.0.2.tar.gz (133kB)
    100% |████████████████████████████████| 143kB 2.7MB/s eta 0:00:01    99% |███████████████████████████████▉| 133kB 18.0MB/s eta 0:00:01
Collecting multiprocess (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/31/60/6d74caa02b54ca43092e745640c7d98f367f07160441682a01602ce00bc5/multiprocess-0.70.7.tar.gz (1.4MB)
    100% |████████████████████████████████| 1.4MB 334kB/s eta 0:00:01
Requirement already satisfied: fastcache in /opt/conda/lib/python3.6/site-packages (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
Requirement already satisfied: toolz in /opt/conda/lib/python3.6/site-packages (from cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
Requirement already satisfied: decorator&gt;=4.0.6 in /opt/conda/lib/python3.6/site-packages (from plotly==2.2.3-&gt;-r requirements.txt (line 7))
Requirement already satisfied: nbformat&gt;=4.2 in /opt/conda/lib/python3.6/site-packages (from plotly==2.2.3-&gt;-r requirements.txt (line 7))
Requirement already satisfied: chardet&lt;3.1.0,&gt;=3.0.2 in /opt/conda/lib/python3.6/site-packages (from requests==2.18.4-&gt;-r requirements.txt (line 11))
Requirement already satisfied: idna&lt;2.7,&gt;=2.5 in /opt/conda/lib/python3.6/site-packages (from requests==2.18.4-&gt;-r requirements.txt (line 11))
Requirement already satisfied: urllib3&lt;1.23,&gt;=1.21.1 in /opt/conda/lib/python3.6/site-packages (from requests==2.18.4-&gt;-r requirements.txt (line 11))
Requirement already satisfied: certifi&gt;=2017.4.17 in /opt/conda/lib/python3.6/site-packages (from requests==2.18.4-&gt;-r requirements.txt (line 11))
Requirement already satisfied: pip&gt;=7.1.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Requirement already satisfied: setuptools&gt;18.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Collecting Logbook&gt;=0.12.5 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/f6/83/20fc0270614919cb799f76e32cf143a54c58ce2fa45c19fd38ac2e4f9977/Logbook-1.4.3.tar.gz (85kB)
    100% |████████████████████████████████| 92kB 3.8MB/s eta 0:00:01
Collecting requests-file&gt;=1.4.1 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/23/9c/6e63c23c39e53d3df41c77a3d05a49a42c4e1383a6d2a5e3233161b89dbf/requests_file-1.4.3-py2.py3-none-any.whl
Collecting pandas-datareader&lt;0.6,&gt;=0.2.1 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/40/c5/cc720f531bbde0efeab940de400d0fcc95e87770a3abcd7f90d6d52a3302/pandas_datareader-0.5.0-py2.py3-none-any.whl (74kB)
    100% |████████████████████████████████| 81kB 3.4MB/s ta 0:00:01
Requirement already satisfied: patsy&gt;=0.4.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Requirement already satisfied: Cython&gt;=0.25.2 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Collecting cyordereddict&gt;=0.2.2 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/d1/1a/364cbfd927be1b743c7f0a985a7f1f7e8a51469619f9fefe4ee9240ba210/cyordereddict-1.0.0.tar.gz (138kB)
    100% |████████████████████████████████| 143kB 2.6MB/s eta 0:00:01  51% |████████████████▋               | 71kB 10.0MB/s eta 0:00:01
Collecting bottleneck&gt;=1.0.0 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/05/ae/cedf5323f398ab4e4ff92d6c431a3e1c6a186f9b41ab3e8258dff786a290/Bottleneck-1.2.1.tar.gz (105kB)
    100% |████████████████████████████████| 112kB 3.7MB/s eta 0:00:01
Collecting contextlib2&gt;=0.4.0 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/a2/71/8273a7eeed0aff6a854237ab5453bc9aa67deb49df4832801c21f0ff3782/contextlib2-0.5.5-py2.py3-none-any.whl
Requirement already satisfied: networkx&lt;2.0,&gt;=1.9.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Requirement already satisfied: numexpr&gt;=2.6.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Collecting bcolz&lt;1,&gt;=0.12.1 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/6c/8b/1ffa01f872cac36173c5eb95b58c01040d8d25f1b242c48577f4104cd3ab/bcolz-0.12.1.tar.gz (622kB)
    100% |████████████████████████████████| 624kB 734kB/s eta 0:00:01
Requirement already satisfied: click&gt;=4.0.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Collecting multipledispatch&gt;=0.4.8 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/89/79/429ecef45fd5e4504f7474d4c3c3c4668c267be3370e4c2fd33e61506833/multipledispatch-0.6.0-py3-none-any.whl
Requirement already satisfied: MarkupSafe&gt;=0.23 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Requirement already satisfied: Mako&gt;=1.0.1 in /opt/conda/lib/python3.6/site-packages/Mako-1.0.7-py3.6.egg (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Requirement already satisfied: sqlalchemy&gt;=1.0.8 in /opt/conda/lib/python3.6/site-packages (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
Collecting alembic&gt;=0.7.7 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/a4/06/f1ae8393463c26f3dafa21eebac611088da02a26e1f1e23bd75fee2dbffe/alembic-1.0.7.tar.gz (1.0MB)
    100% |████████████████████████████████| 1.0MB 433kB/s eta 0:00:01
Collecting sortedcontainers&gt;=1.4.4 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/13/f3/cf85f7c3a2dbd1a515d51e1f1676d971abe41bba6f4ab5443240d9a78e5b/sortedcontainers-2.1.0-py2.py3-none-any.whl
Collecting intervaltree&gt;=2.1.0 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/e8/f9/76237755b2020cd74549e98667210b2dd54d3fb17c6f4a62631e61d31225/intervaltree-3.0.2.tar.gz
Collecting lru-dict&gt;=1.1.4 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/00/a5/32ed6e10246cd341ca8cc205acea5d208e4053f48a4dced2b1b31d45ba3f/lru-dict-1.1.6.tar.gz
Collecting empyrical&gt;=0.4.2 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/7b/55/a01b05162b764830dbbac868462f44cd847a5b6523a01ca9f955721819da/empyrical-0.5.0.tar.gz (49kB)
    100% |████████████████████████████████| 51kB 2.3MB/s ta 0:00:01    82% |██████████████████████████▎     | 40kB 8.1MB/s eta 0:00:01
Collecting tables&gt;=3.3.0 (from zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/d7/1b/21f4c7f296b718575c17ef25e61c05742a283c45077b4c8d5a190b3e0b59/tables-3.4.4-cp36-cp36m-manylinux1_x86_64.whl (3.8MB)
    100% |████████████████████████████████| 3.8MB 125kB/s eta 0:00:01    72% |███████████████████████▏        | 2.7MB 30.6MB/s eta 0:00:01
Requirement already satisfied: pickleshare in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: backcall in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: pygments in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: traitlets&gt;=4.2 in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: prompt-toolkit&lt;2.0.0,&gt;=1.0.15 in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: pexpect; sys_platform != &#34;win32&#34; in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: simplegeneric&gt;0.8 in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: jedi&gt;=0.10 in /opt/conda/lib/python3.6/site-packages (from IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: future in /opt/conda/lib/python3.6/site-packages (from osqp-&gt;cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
Collecting dill&gt;=0.2.9 (from multiprocess-&gt;cvxpy==1.0.3-&gt;-r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/fe/42/bfe2e0857bc284cbe6a011d93f2a9ad58a22cb894461b199ae72cfef0f29/dill-0.2.9.tar.gz (150kB)
    100% |████████████████████████████████| 153kB 2.4MB/s eta 0:00:01
Requirement already satisfied: jsonschema!=2.5.0,&gt;=2.4 in /opt/conda/lib/python3.6/site-packages (from nbformat&gt;=4.2-&gt;plotly==2.2.3-&gt;-r requirements.txt (line 7))
Requirement already satisfied: ipython-genutils in /opt/conda/lib/python3.6/site-packages (from nbformat&gt;=4.2-&gt;plotly==2.2.3-&gt;-r requirements.txt (line 7))
Requirement already satisfied: jupyter-core in /opt/conda/lib/python3.6/site-packages (from nbformat&gt;=4.2-&gt;plotly==2.2.3-&gt;-r requirements.txt (line 7))
Collecting requests-ftp (from pandas-datareader&lt;0.6,&gt;=0.2.1-&gt;zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/3d/ca/14b2ad1e93b5195eeaf56b86b7ecfd5ea2d5754a68d17aeb1e5b9f95b3cf/requests-ftp-0.3.1.tar.gz
Collecting python-editor&gt;=0.3 (from alembic&gt;=0.7.7-&gt;zipline===1.2.0-&gt;-r requirements.txt (line 16))
  Downloading https://files.pythonhosted.org/packages/c6/d3/201fc3abe391bbae6606e6f1d598c15d367033332bd54352b12f35513717/python_editor-1.0.4-py3-none-any.whl
Requirement already satisfied: wcwidth in /opt/conda/lib/python3.6/site-packages (from prompt-toolkit&lt;2.0.0,&gt;=1.0.15-&gt;IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Requirement already satisfied: ptyprocess&gt;=0.5 in /opt/conda/lib/python3.6/site-packages (from pexpect; sys_platform != &#34;win32&#34;-&gt;IPython&gt;=3.2.3-&gt;alphalens==0.3.2-&gt;-r requirements.txt (line 1))
Building wheels for collected packages: alphalens, cvxpy, pandas, plotly, zipline, scs, multiprocess, Logbook, cyordereddict, bottleneck, bcolz, alembic, intervaltree, lru-dict, empyrical, dill, requests-ftp
  Running setup.py bdist_wheel for alphalens ... done
  Stored in directory: /root/.cache/pip/wheels/77/1e/9a/223b4c94d7f564f25d94b48ca5b9c53e3034016ece3fd8c8c1
  Running setup.py bdist_wheel for cvxpy ... done
  Stored in directory: /root/.cache/pip/wheels/2b/60/0b/0c2596528665e21d698d6f84a3406c52044c7b4ca6ac737cf3
  Running setup.py bdist_wheel for pandas ... done
  Stored in directory: /root/.cache/pip/wheels/a3/08/c3/8fdd52954d4b415624cff43c6dd32a22bac90306976a98f4af
  Running setup.py bdist_wheel for plotly ... done
  Stored in directory: /root/.cache/pip/wheels/98/54/81/dd92d5b0858fac680cd7bdb8800eb26c001dd9f5dc8b1bc0ba
  Running setup.py bdist_wheel for zipline ... done
  Stored in directory: /root/.cache/pip/wheels/5d/20/7d/b48368c8634b1cb6cc7232833b2780a265d4217c0ad2e3d24c
  Running setup.py bdist_wheel for scs ... done
  Stored in directory: /root/.cache/pip/wheels/ff/f0/aa/530ccd478d7d9900b4e9ef5bc5a39e895ce110bed3d3ac653e
  Running setup.py bdist_wheel for multiprocess ... done
  Stored in directory: /root/.cache/pip/wheels/3a/ed/51/77c833462c3e757ce50c4b2b68bdf53f5d1745542fe567d740
  Running setup.py bdist_wheel for Logbook ... done
  Stored in directory: /root/.cache/pip/wheels/a2/9f/6f/8c7a4ed6b9f6f3c98b742dbb0fd41fff3c130119c507376301
  Running setup.py bdist_wheel for cyordereddict ... done
  Stored in directory: /root/.cache/pip/wheels/0b/9d/8b/5bf3e22c1edd59b50f11bb19dec9dfcfe5a479fc7ace02b61f
  Running setup.py bdist_wheel for bottleneck ... done
  Stored in directory: /root/.cache/pip/wheels/f2/bf/ec/e0f39aa27001525ad455139ee57ec7d0776fe074dfd78c97e4
  Running setup.py bdist_wheel for bcolz ... done
  Stored in directory: /root/.cache/pip/wheels/c5/cc/1b/2cf1f88959af5d7f4d449b7fc6c9452d0ecbd86fd61a9ee376
  Running setup.py bdist_wheel for alembic ... done
  Stored in directory: /root/.cache/pip/wheels/f9/71/46/604b8a4f0a04b513f5799c974b556c1de19a70fde41d25672b
  Running setup.py bdist_wheel for intervaltree ... done
  Stored in directory: /root/.cache/pip/wheels/08/99/c0/5a5942f5b9567c59c14aac76f95a70bf11dccc71240b91ebf5
  Running setup.py bdist_wheel for lru-dict ... done
  Stored in directory: /root/.cache/pip/wheels/b7/ef/06/fbdd555907a7d438fb33e4c8675f771ff1cf41917284c51ebf
  Running setup.py bdist_wheel for empyrical ... done
  Stored in directory: /root/.cache/pip/wheels/83/14/73/34fb27552601518d28bd0813d75124be76d94ab29152c69112
  Running setup.py bdist_wheel for dill ... done
  Stored in directory: /root/.cache/pip/wheels/5b/d7/0f/e58eae695403de585269f4e4a94e0cd6ca60ec0c202936fa4a
  Running setup.py bdist_wheel for requests-ftp ... done
  Stored in directory: /root/.cache/pip/wheels/2a/98/32/37195e45a3392a73d9f65c488cbea30fe5bad76aaef4d6b020
Successfully built alphalens cvxpy pandas plotly zipline scs multiprocess Logbook cyordereddict bottleneck bcolz alembic intervaltree lru-dict empyrical dill requests-ftp
Installing collected packages: numpy, pandas, scipy, alphalens, osqp, ecos, scs, dill, multiprocess, cvxpy, plotly, tqdm, Logbook, requests-file, requests-ftp, pandas-datareader, cyordereddict, bottleneck, contextlib2, bcolz, multipledispatch, python-editor, alembic, sortedcontainers, intervaltree, lru-dict, empyrical, tables, zipline
  Found existing installation: numpy 1.12.1
    Uninstalling numpy-1.12.1:
      Successfully uninstalled numpy-1.12.1
  Found existing installation: pandas 0.20.3
    Uninstalling pandas-0.20.3:
      Successfully uninstalled pandas-0.20.3
  Found existing installation: scipy 0.19.1
    Uninstalling scipy-0.19.1:
      Successfully uninstalled scipy-0.19.1
  Found existing installation: dill 0.2.7.1
    Uninstalling dill-0.2.7.1:
      Successfully uninstalled dill-0.2.7.1
  Found existing installation: plotly 2.0.15
    Uninstalling plotly-2.0.15:
      Successfully uninstalled plotly-2.0.15
  Found existing installation: tqdm 4.11.2
    Uninstalling tqdm-4.11.2:
      Successfully uninstalled tqdm-4.11.2
Successfully installed Logbook-1.4.3 alembic-1.0.7 alphalens-0.3.2 bcolz-0.12.1 bottleneck-1.2.1 contextlib2-0.5.5 cvxpy-1.0.3 cyordereddict-1.0.0 dill-0.2.9 ecos-2.0.7.post1 empyrical-0.5.0 intervaltree-3.0.2 lru-dict-1.1.6 multipledispatch-0.6.0 multiprocess-0.70.7 numpy-1.13.3 osqp-0.5.0 pandas-0.18.1 pandas-datareader-0.5.0 plotly-2.2.3 python-editor-1.0.4 requests-file-1.4.3 requests-ftp-0.3.1 scipy-1.0.0 scs-2.0.2 sortedcontainers-2.1.0 tables-3.4.4 tqdm-4.19.5 zipline-1.2.0
<span class="ansi-yellow-fg">You are using pip version 9.0.1, however version 19.0.2 is available.
You should consider upgrading via the &#39;pip install --upgrade pip&#39; command.</span>
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[122]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="o">!</span>pip install -U <span class="nv">numpy</span><span class="o">==</span><span class="m">1</span>.14.5
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Collecting numpy==1.14.5
  Downloading https://files.pythonhosted.org/packages/68/1e/116ad560de97694e2d0c1843a7a0075cc9f49e922454d32f49a80eb6f1f2/numpy-1.14.5-cp36-cp36m-manylinux1_x86_64.whl (12.2MB)
    100% |████████████████████████████████| 12.2MB 38kB/s  eta 0:00:01   15% |████▉                           | 1.9MB 34.4MB/s eta 0:00:01    28% |█████████▎                      | 3.5MB 35.6MB/s eta 0:00:01
Installing collected packages: numpy
  Found existing installation: numpy 1.15.0
    Uninstalling numpy-1.15.0:
      Successfully uninstalled numpy-1.15.0
Successfully installed numpy-1.14.5
<span class="ansi-yellow-fg">You are using pip version 9.0.1, however version 19.0.2 is available.
You should consider upgrading via the &#39;pip install --upgrade pip&#39; command.</span>
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Load-Packages">Load Packages<a class="anchor-link" href="#Load-Packages">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">cvxpy</span> <span class="k">as</span> <span class="nn">cvx</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">project_tests</span>
<span class="kn">import</span> <span class="nn">project_helper</span>

<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="n">plt</span><span class="o">.</span><span class="n">style</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;ggplot&#39;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Data-Bundle">Data Bundle<a class="anchor-link" href="#Data-Bundle">&#182;</a></h2><p>We'll be using Zipline to handle our data. We've created a end of day data bundle for this project. Run the cell below to register this data bundle in zipline.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">project_helper</span>
<span class="kn">from</span> <span class="nn">zipline.data</span> <span class="k">import</span> <span class="n">bundles</span>

<span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;ZIPLINE_ROOT&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">(),</span> <span class="s1">&#39;..&#39;</span><span class="p">,</span> <span class="s1">&#39;..&#39;</span><span class="p">,</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="s1">&#39;project_4_eod&#39;</span><span class="p">)</span>

<span class="n">ingest_func</span> <span class="o">=</span> <span class="n">bundles</span><span class="o">.</span><span class="n">csvdir</span><span class="o">.</span><span class="n">csvdir_equities</span><span class="p">([</span><span class="s1">&#39;daily&#39;</span><span class="p">],</span> <span class="n">project_helper</span><span class="o">.</span><span class="n">EOD_BUNDLE_NAME</span><span class="p">)</span>
<span class="n">bundles</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">project_helper</span><span class="o">.</span><span class="n">EOD_BUNDLE_NAME</span><span class="p">,</span> <span class="n">ingest_func</span><span class="p">)</span>

<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Data Registered&#39;</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Data Registered
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Build-Pipeline-Engine">Build Pipeline Engine<a class="anchor-link" href="#Build-Pipeline-Engine">&#182;</a></h2><p>We'll be using Zipline's pipeline package to access our data for this project. To use it, we must build a pipeline engine. Run the cell below to build the engine.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">zipline.pipeline</span> <span class="k">import</span> <span class="n">Pipeline</span>
<span class="kn">from</span> <span class="nn">zipline.pipeline.factors</span> <span class="k">import</span> <span class="n">AverageDollarVolume</span>
<span class="kn">from</span> <span class="nn">zipline.utils.calendars</span> <span class="k">import</span> <span class="n">get_calendar</span>


<span class="n">universe</span> <span class="o">=</span> <span class="n">AverageDollarVolume</span><span class="p">(</span><span class="n">window_length</span><span class="o">=</span><span class="mi">120</span><span class="p">)</span><span class="o">.</span><span class="n">top</span><span class="p">(</span><span class="mi">500</span><span class="p">)</span> 
<span class="n">trading_calendar</span> <span class="o">=</span> <span class="n">get_calendar</span><span class="p">(</span><span class="s1">&#39;NYSE&#39;</span><span class="p">)</span> 
<span class="n">bundle_data</span> <span class="o">=</span> <span class="n">bundles</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">project_helper</span><span class="o">.</span><span class="n">EOD_BUNDLE_NAME</span><span class="p">)</span>
<span class="n">engine</span> <span class="o">=</span> <span class="n">project_helper</span><span class="o">.</span><span class="n">build_pipeline_engine</span><span class="p">(</span><span class="n">bundle_data</span><span class="p">,</span> <span class="n">trading_calendar</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>With the pipeline engine built, let's get the stocks at the end of the period in the universe we're using. We'll use these tickers to generate the returns data for the our risk model.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">universe_end_date</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">(</span><span class="s1">&#39;2016-01-05&#39;</span><span class="p">,</span> <span class="n">tz</span><span class="o">=</span><span class="s1">&#39;UTC&#39;</span><span class="p">)</span>

<span class="n">universe_tickers</span> <span class="o">=</span> <span class="n">engine</span>\
    <span class="o">.</span><span class="n">run_pipeline</span><span class="p">(</span>
        <span class="n">Pipeline</span><span class="p">(</span><span class="n">screen</span><span class="o">=</span><span class="n">universe</span><span class="p">),</span>
        <span class="n">universe_end_date</span><span class="p">,</span>
        <span class="n">universe_end_date</span><span class="p">)</span>\
    <span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>\
    <span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
    
<span class="n">universe_tickers</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[4]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[Equity(0 [A]),
 Equity(1 [AAL]),
 Equity(2 [AAP]),
 Equity(3 [AAPL]),
 Equity(4 [ABBV]),
 Equity(5 [ABC]),
 Equity(6 [ABT]),
 Equity(7 [ACN]),
 Equity(8 [ADBE]),
 Equity(9 [ADI]),
 Equity(10 [ADM]),
 Equity(11 [ADP]),
 Equity(12 [ADS]),
 Equity(13 [ADSK]),
 Equity(14 [AEE]),
 Equity(15 [AEP]),
 Equity(16 [AES]),
 Equity(17 [AET]),
 Equity(18 [AFL]),
 Equity(19 [AGN]),
 Equity(20 [AIG]),
 Equity(21 [AIV]),
 Equity(22 [AIZ]),
 Equity(23 [AJG]),
 Equity(24 [AKAM]),
 Equity(25 [ALB]),
 Equity(26 [ALGN]),
 Equity(27 [ALK]),
 Equity(28 [ALL]),
 Equity(29 [ALLE]),
 Equity(30 [ALXN]),
 Equity(31 [AMAT]),
 Equity(32 [AMD]),
 Equity(33 [AME]),
 Equity(34 [AMG]),
 Equity(35 [AMGN]),
 Equity(36 [AMP]),
 Equity(37 [AMT]),
 Equity(38 [AMZN]),
 Equity(39 [ANDV]),
 Equity(40 [ANSS]),
 Equity(41 [ANTM]),
 Equity(42 [AON]),
 Equity(43 [AOS]),
 Equity(44 [APA]),
 Equity(45 [APC]),
 Equity(46 [APD]),
 Equity(47 [APH]),
 Equity(48 [ARE]),
 Equity(49 [ARNC]),
 Equity(50 [ATVI]),
 Equity(51 [AVB]),
 Equity(52 [AVGO]),
 Equity(53 [AVY]),
 Equity(54 [AWK]),
 Equity(55 [AXP]),
 Equity(56 [AYI]),
 Equity(57 [AZO]),
 Equity(58 [BA]),
 Equity(59 [BAC]),
 Equity(60 [BAX]),
 Equity(61 [BBT]),
 Equity(62 [BBY]),
 Equity(63 [BCR]),
 Equity(64 [BDX]),
 Equity(65 [BEN]),
 Equity(66 [BIIB]),
 Equity(67 [BK]),
 Equity(68 [BLK]),
 Equity(69 [BLL]),
 Equity(70 [BMY]),
 Equity(71 [BSX]),
 Equity(72 [BWA]),
 Equity(73 [BXP]),
 Equity(74 [C]),
 Equity(75 [CA]),
 Equity(76 [CAG]),
 Equity(77 [CAH]),
 Equity(78 [CAT]),
 Equity(79 [CB]),
 Equity(80 [CBG]),
 Equity(81 [CBOE]),
 Equity(82 [CBS]),
 Equity(83 [CCI]),
 Equity(84 [CCL]),
 Equity(85 [CELG]),
 Equity(86 [CERN]),
 Equity(87 [CF]),
 Equity(88 [CFG]),
 Equity(89 [CHD]),
 Equity(90 [CHK]),
 Equity(91 [CHRW]),
 Equity(92 [CHTR]),
 Equity(93 [CI]),
 Equity(94 [CINF]),
 Equity(95 [CL]),
 Equity(96 [CLX]),
 Equity(97 [CMA]),
 Equity(98 [CMCSA]),
 Equity(99 [CME]),
 Equity(100 [CMG]),
 Equity(101 [CMI]),
 Equity(102 [CMS]),
 Equity(103 [CNC]),
 Equity(104 [CNP]),
 Equity(105 [COF]),
 Equity(106 [COG]),
 Equity(107 [COL]),
 Equity(108 [COO]),
 Equity(109 [COP]),
 Equity(110 [COST]),
 Equity(111 [COTY]),
 Equity(112 [CPB]),
 Equity(113 [CRM]),
 Equity(114 [CSCO]),
 Equity(115 [CSRA]),
 Equity(116 [CSX]),
 Equity(117 [CTAS]),
 Equity(118 [CTL]),
 Equity(119 [CTSH]),
 Equity(120 [CTXS]),
 Equity(121 [CVS]),
 Equity(122 [CVX]),
 Equity(123 [CXO]),
 Equity(124 [D]),
 Equity(125 [DAL]),
 Equity(126 [DE]),
 Equity(127 [DFS]),
 Equity(128 [DG]),
 Equity(129 [DGX]),
 Equity(130 [DHI]),
 Equity(131 [DHR]),
 Equity(132 [DIS]),
 Equity(133 [DISCA]),
 Equity(134 [DISCK]),
 Equity(135 [DISH]),
 Equity(136 [DLR]),
 Equity(137 [DLTR]),
 Equity(138 [DOV]),
 Equity(139 [DPS]),
 Equity(140 [DRE]),
 Equity(141 [DRI]),
 Equity(142 [DTE]),
 Equity(143 [DUK]),
 Equity(144 [DVA]),
 Equity(145 [DVN]),
 Equity(146 [EA]),
 Equity(147 [EBAY]),
 Equity(148 [ECL]),
 Equity(149 [ED]),
 Equity(150 [EFX]),
 Equity(151 [EIX]),
 Equity(152 [EL]),
 Equity(153 [EMN]),
 Equity(154 [EMR]),
 Equity(155 [EOG]),
 Equity(156 [EQIX]),
 Equity(157 [EQR]),
 Equity(158 [EQT]),
 Equity(159 [ES]),
 Equity(160 [ESRX]),
 Equity(161 [ESS]),
 Equity(162 [ETFC]),
 Equity(163 [ETN]),
 Equity(164 [ETR]),
 Equity(165 [EVHC]),
 Equity(166 [EW]),
 Equity(167 [EXC]),
 Equity(168 [EXPD]),
 Equity(169 [EXPE]),
 Equity(170 [EXR]),
 Equity(171 [F]),
 Equity(172 [FAST]),
 Equity(173 [FB]),
 Equity(174 [FBHS]),
 Equity(175 [FCX]),
 Equity(176 [FDX]),
 Equity(177 [FE]),
 Equity(178 [FFIV]),
 Equity(179 [FIS]),
 Equity(180 [FISV]),
 Equity(181 [FITB]),
 Equity(182 [FL]),
 Equity(183 [FLIR]),
 Equity(184 [FLR]),
 Equity(185 [FLS]),
 Equity(186 [FMC]),
 Equity(187 [FOX]),
 Equity(188 [FOXA]),
 Equity(189 [FRT]),
 Equity(190 [FTI]),
 Equity(191 [GD]),
 Equity(192 [GE]),
 Equity(193 [GGP]),
 Equity(194 [GILD]),
 Equity(195 [GIS]),
 Equity(196 [GLW]),
 Equity(197 [GM]),
 Equity(198 [GOOG]),
 Equity(199 [GOOGL]),
 Equity(200 [GPC]),
 Equity(201 [GPN]),
 Equity(202 [GPS]),
 Equity(203 [GRMN]),
 Equity(204 [GS]),
 Equity(205 [GT]),
 Equity(206 [GWW]),
 Equity(207 [HAL]),
 Equity(208 [HAS]),
 Equity(209 [HBAN]),
 Equity(210 [HBI]),
 Equity(211 [HCA]),
 Equity(212 [HCN]),
 Equity(213 [HCP]),
 Equity(214 [HD]),
 Equity(215 [HES]),
 Equity(216 [HIG]),
 Equity(217 [HLT]),
 Equity(218 [HOG]),
 Equity(219 [HOLX]),
 Equity(220 [HON]),
 Equity(221 [HP]),
 Equity(222 [HPE]),
 Equity(223 [HPQ]),
 Equity(224 [HRB]),
 Equity(225 [HRL]),
 Equity(226 [HRS]),
 Equity(227 [HSIC]),
 Equity(228 [HST]),
 Equity(229 [HSY]),
 Equity(230 [HUM]),
 Equity(231 [IBM]),
 Equity(232 [ICE]),
 Equity(233 [IDXX]),
 Equity(234 [IFF]),
 Equity(235 [ILMN]),
 Equity(236 [INCY]),
 Equity(237 [INFO]),
 Equity(238 [INTC]),
 Equity(239 [INTU]),
 Equity(240 [IP]),
 Equity(241 [IPG]),
 Equity(242 [IR]),
 Equity(243 [IRM]),
 Equity(244 [ISRG]),
 Equity(245 [IT]),
 Equity(246 [ITW]),
 Equity(247 [IVZ]),
 Equity(248 [JBHT]),
 Equity(249 [JCI]),
 Equity(250 [JEC]),
 Equity(251 [JNJ]),
 Equity(252 [JNPR]),
 Equity(253 [JPM]),
 Equity(254 [JWN]),
 Equity(255 [K]),
 Equity(256 [KEY]),
 Equity(257 [KHC]),
 Equity(258 [KIM]),
 Equity(259 [KLAC]),
 Equity(260 [KMB]),
 Equity(261 [KMI]),
 Equity(262 [KMX]),
 Equity(263 [KO]),
 Equity(264 [KORS]),
 Equity(265 [KR]),
 Equity(266 [KSS]),
 Equity(267 [KSU]),
 Equity(268 [L]),
 Equity(269 [LB]),
 Equity(270 [LEG]),
 Equity(271 [LEN]),
 Equity(272 [LH]),
 Equity(273 [LKQ]),
 Equity(274 [LLL]),
 Equity(275 [LLY]),
 Equity(276 [LMT]),
 Equity(277 [LNC]),
 Equity(278 [LNT]),
 Equity(279 [LOW]),
 Equity(280 [LRCX]),
 Equity(281 [LUK]),
 Equity(282 [LUV]),
 Equity(283 [LVLT]),
 Equity(284 [LYB]),
 Equity(285 [M]),
 Equity(286 [MA]),
 Equity(287 [MAA]),
 Equity(288 [MAC]),
 Equity(289 [MAR]),
 Equity(290 [MAS]),
 Equity(291 [MAT]),
 Equity(292 [MCD]),
 Equity(293 [MCHP]),
 Equity(294 [MCK]),
 Equity(295 [MCO]),
 Equity(296 [MDLZ]),
 Equity(297 [MDT]),
 Equity(298 [MET]),
 Equity(299 [MGM]),
 Equity(300 [MHK]),
 Equity(301 [MKC]),
 Equity(302 [MLM]),
 Equity(303 [MMC]),
 Equity(304 [MNST]),
 Equity(305 [MO]),
 Equity(306 [MON]),
 Equity(307 [MOS]),
 Equity(308 [MPC]),
 Equity(309 [MRK]),
 Equity(310 [MRO]),
 Equity(311 [MS]),
 Equity(312 [MSFT]),
 Equity(313 [MSI]),
 Equity(314 [MTB]),
 Equity(315 [MTD]),
 Equity(316 [MU]),
 Equity(317 [MYL]),
 Equity(318 [NAVI]),
 Equity(319 [NBL]),
 Equity(320 [NDAQ]),
 Equity(321 [NEE]),
 Equity(322 [NEM]),
 Equity(323 [NFLX]),
 Equity(324 [NFX]),
 Equity(325 [NI]),
 Equity(326 [NKE]),
 Equity(327 [NLSN]),
 Equity(328 [NOC]),
 Equity(329 [NOV]),
 Equity(330 [NRG]),
 Equity(331 [NSC]),
 Equity(332 [NTAP]),
 Equity(333 [NTRS]),
 Equity(334 [NUE]),
 Equity(335 [NVDA]),
 Equity(336 [NWL]),
 Equity(337 [NWS]),
 Equity(338 [NWSA]),
 Equity(339 [O]),
 Equity(340 [OKE]),
 Equity(341 [OMC]),
 Equity(342 [ORCL]),
 Equity(343 [ORLY]),
 Equity(344 [OXY]),
 Equity(345 [PAYX]),
 Equity(346 [PBCT]),
 Equity(347 [PCAR]),
 Equity(348 [PCG]),
 Equity(349 [PDCO]),
 Equity(350 [PEG]),
 Equity(351 [PEP]),
 Equity(352 [PFE]),
 Equity(353 [PFG]),
 Equity(354 [PG]),
 Equity(355 [PGR]),
 Equity(356 [PH]),
 Equity(357 [PHM]),
 Equity(358 [PKG]),
 Equity(359 [PKI]),
 Equity(360 [PLD]),
 Equity(361 [PM]),
 Equity(362 [PNC]),
 Equity(363 [PNR]),
 Equity(364 [PNW]),
 Equity(365 [PPG]),
 Equity(366 [PPL]),
 Equity(367 [PRGO]),
 Equity(368 [PRU]),
 Equity(369 [PSA]),
 Equity(370 [PSX]),
 Equity(371 [PVH]),
 Equity(372 [PWR]),
 Equity(373 [PX]),
 Equity(374 [PXD]),
 Equity(375 [PYPL]),
 Equity(376 [QCOM]),
 Equity(377 [QRVO]),
 Equity(378 [RCL]),
 Equity(379 [RE]),
 Equity(380 [REG]),
 Equity(381 [REGN]),
 Equity(382 [RF]),
 Equity(383 [RHI]),
 Equity(384 [RHT]),
 Equity(385 [RJF]),
 Equity(386 [RL]),
 Equity(387 [RMD]),
 Equity(388 [ROK]),
 Equity(389 [ROP]),
 Equity(390 [ROST]),
 Equity(391 [RRC]),
 Equity(392 [RSG]),
 Equity(393 [RTN]),
 Equity(394 [SBAC]),
 Equity(395 [SBUX]),
 Equity(396 [SCG]),
 Equity(397 [SCHW]),
 Equity(398 [SEE]),
 Equity(399 [SHW]),
 Equity(400 [SIG]),
 Equity(401 [SJM]),
 Equity(402 [SLB]),
 Equity(403 [SLG]),
 Equity(404 [SNA]),
 Equity(405 [SNI]),
 Equity(406 [SNPS]),
 Equity(407 [SO]),
 Equity(408 [SPG]),
 Equity(409 [SPLS]),
 Equity(410 [SRCL]),
 Equity(411 [SRE]),
 Equity(412 [STI]),
 Equity(413 [STT]),
 Equity(414 [STX]),
 Equity(415 [STZ]),
 Equity(416 [SWK]),
 Equity(417 [SWKS]),
 Equity(418 [SYF]),
 Equity(419 [SYK]),
 Equity(420 [SYMC]),
 Equity(421 [SYY]),
 Equity(422 [T]),
 Equity(423 [TAP]),
 Equity(424 [TDG]),
 Equity(425 [TEL]),
 Equity(426 [TGT]),
 Equity(427 [TIF]),
 Equity(428 [TJX]),
 Equity(429 [TMK]),
 Equity(430 [TMO]),
 Equity(431 [TRIP]),
 Equity(432 [TROW]),
 Equity(433 [TRV]),
 Equity(434 [TSCO]),
 Equity(435 [TSN]),
 Equity(436 [TSS]),
 Equity(437 [TWX]),
 Equity(438 [TXN]),
 Equity(439 [TXT]),
 Equity(440 [UAA]),
 Equity(441 [UAL]),
 Equity(442 [UDR]),
 Equity(443 [UHS]),
 Equity(444 [ULTA]),
 Equity(445 [UNH]),
 Equity(446 [UNM]),
 Equity(447 [UNP]),
 Equity(448 [UPS]),
 Equity(449 [URI]),
 Equity(450 [USB]),
 Equity(451 [UTX]),
 Equity(452 [V]),
 Equity(453 [VAR]),
 Equity(454 [VFC]),
 Equity(455 [VIAB]),
 Equity(456 [VLO]),
 Equity(457 [VMC]),
 Equity(458 [VNO]),
 Equity(459 [VRSK]),
 Equity(460 [VRSN]),
 Equity(461 [VRTX]),
 Equity(462 [VTR]),
 Equity(463 [VZ]),
 Equity(464 [WAT]),
 Equity(465 [WBA]),
 Equity(466 [WDC]),
 Equity(467 [WEC]),
 Equity(468 [WFC]),
 Equity(469 [WHR]),
 Equity(471 [WM]),
 Equity(472 [WMB]),
 Equity(473 [WMT]),
 Equity(474 [WRK]),
 Equity(475 [WU]),
 Equity(476 [WY]),
 Equity(477 [WYN]),
 Equity(478 [WYNN]),
 Equity(479 [XEC]),
 Equity(480 [XEL]),
 Equity(481 [XL]),
 Equity(482 [XLNX]),
 Equity(483 [XOM]),
 Equity(484 [XRAY]),
 Equity(485 [XRX]),
 Equity(486 [XYL]),
 Equity(487 [YUM]),
 Equity(488 [ZBH]),
 Equity(489 [ZION]),
 Equity(490 [ZTS])]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Get-Returns">Get Returns<a class="anchor-link" href="#Get-Returns">&#182;</a></h2><p>Not that we have our pipeline built, let's access the returns data. We'll start by building a data portal.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">zipline.data.data_portal</span> <span class="k">import</span> <span class="n">DataPortal</span>


<span class="n">data_portal</span> <span class="o">=</span> <span class="n">DataPortal</span><span class="p">(</span>
    <span class="n">bundle_data</span><span class="o">.</span><span class="n">asset_finder</span><span class="p">,</span>
    <span class="n">trading_calendar</span><span class="o">=</span><span class="n">trading_calendar</span><span class="p">,</span>
    <span class="n">first_trading_day</span><span class="o">=</span><span class="n">bundle_data</span><span class="o">.</span><span class="n">equity_daily_bar_reader</span><span class="o">.</span><span class="n">first_trading_day</span><span class="p">,</span>
    <span class="n">equity_minute_reader</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
    <span class="n">equity_daily_reader</span><span class="o">=</span><span class="n">bundle_data</span><span class="o">.</span><span class="n">equity_daily_bar_reader</span><span class="p">,</span>
    <span class="n">adjustment_reader</span><span class="o">=</span><span class="n">bundle_data</span><span class="o">.</span><span class="n">adjustment_reader</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>To make the code easier to read, we've built the helper function <code>get_pricing</code> to get the pricing from the data portal.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">get_pricing</span><span class="p">(</span><span class="n">data_portal</span><span class="p">,</span> <span class="n">trading_calendar</span><span class="p">,</span> <span class="n">assets</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="s1">&#39;close&#39;</span><span class="p">):</span>
    <span class="n">end_dt</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">(</span><span class="n">end_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">),</span> <span class="n">tz</span><span class="o">=</span><span class="s1">&#39;UTC&#39;</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="s1">&#39;C&#39;</span><span class="p">)</span>
    <span class="n">start_dt</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">(</span><span class="n">start_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">),</span> <span class="n">tz</span><span class="o">=</span><span class="s1">&#39;UTC&#39;</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="s1">&#39;C&#39;</span><span class="p">)</span>

    <span class="n">end_loc</span> <span class="o">=</span> <span class="n">trading_calendar</span><span class="o">.</span><span class="n">closes</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_loc</span><span class="p">(</span><span class="n">end_dt</span><span class="p">)</span>
    <span class="n">start_loc</span> <span class="o">=</span> <span class="n">trading_calendar</span><span class="o">.</span><span class="n">closes</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_loc</span><span class="p">(</span><span class="n">start_dt</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">data_portal</span><span class="o">.</span><span class="n">get_history_window</span><span class="p">(</span>
        <span class="n">assets</span><span class="o">=</span><span class="n">assets</span><span class="p">,</span>
        <span class="n">end_dt</span><span class="o">=</span><span class="n">end_dt</span><span class="p">,</span>
        <span class="n">bar_count</span><span class="o">=</span><span class="n">end_loc</span> <span class="o">-</span> <span class="n">start_loc</span><span class="p">,</span>
        <span class="n">frequency</span><span class="o">=</span><span class="s1">&#39;1d&#39;</span><span class="p">,</span>
        <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
        <span class="n">data_frequency</span><span class="o">=</span><span class="s1">&#39;daily&#39;</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's get returns data for our risk model using the <code>get_pricing</code> function. For this model, we'll be looking back to 5 years of data.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">five_year_returns</span> <span class="o">=</span> \
    <span class="n">get_pricing</span><span class="p">(</span>
        <span class="n">data_portal</span><span class="p">,</span>
        <span class="n">trading_calendar</span><span class="p">,</span>
        <span class="n">universe_tickers</span><span class="p">,</span>
        <span class="n">universe_end_date</span> <span class="o">-</span> <span class="n">pd</span><span class="o">.</span><span class="n">DateOffset</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="mi">5</span><span class="p">),</span>
        <span class="n">universe_end_date</span><span class="p">)</span>\
    <span class="o">.</span><span class="n">pct_change</span><span class="p">()[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>

<span class="n">five_year_returns</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[7]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Equity(0 [A])</th>
      <th>Equity(1 [AAL])</th>
      <th>Equity(2 [AAP])</th>
      <th>Equity(3 [AAPL])</th>
      <th>Equity(4 [ABBV])</th>
      <th>Equity(5 [ABC])</th>
      <th>Equity(6 [ABT])</th>
      <th>Equity(7 [ACN])</th>
      <th>Equity(8 [ADBE])</th>
      <th>Equity(9 [ADI])</th>
      <th>...</th>
      <th>Equity(481 [XL])</th>
      <th>Equity(482 [XLNX])</th>
      <th>Equity(483 [XOM])</th>
      <th>Equity(484 [XRAY])</th>
      <th>Equity(485 [XRX])</th>
      <th>Equity(486 [XYL])</th>
      <th>Equity(487 [YUM])</th>
      <th>Equity(488 [ZBH])</th>
      <th>Equity(489 [ZION])</th>
      <th>Equity(490 [ZTS])</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>2011-01-07 00:00:00+00:00</th>
      <td>0.00843652</td>
      <td>0.01423027</td>
      <td>0.02670202</td>
      <td>0.00714639</td>
      <td>0.00000000</td>
      <td>0.00199434</td>
      <td>0.00416541</td>
      <td>0.00164769</td>
      <td>-0.00712736</td>
      <td>-0.00581846</td>
      <td>...</td>
      <td>-0.00183775</td>
      <td>-0.00561865</td>
      <td>0.00546091</td>
      <td>-0.00404361</td>
      <td>-0.01395259</td>
      <td>0.00000000</td>
      <td>0.01245693</td>
      <td>-0.00018145</td>
      <td>-0.01045802</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-10 00:00:00+00:00</th>
      <td>-0.00417428</td>
      <td>0.00619534</td>
      <td>0.00743543</td>
      <td>0.01885158</td>
      <td>0.00000000</td>
      <td>-0.00571429</td>
      <td>-0.00889600</td>
      <td>-0.00885384</td>
      <td>0.02871411</td>
      <td>0.00292626</td>
      <td>...</td>
      <td>0.00094687</td>
      <td>0.00781438</td>
      <td>-0.00608100</td>
      <td>0.01046585</td>
      <td>0.00973303</td>
      <td>0.00000000</td>
      <td>0.00143979</td>
      <td>0.00778351</td>
      <td>-0.01794496</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-11 00:00:00+00:00</th>
      <td>-0.00188630</td>
      <td>-0.04364361</td>
      <td>-0.00592730</td>
      <td>-0.00236744</td>
      <td>0.00000000</td>
      <td>0.00978303</td>
      <td>-0.00206747</td>
      <td>0.01371668</td>
      <td>0.00060680</td>
      <td>0.00875316</td>
      <td>...</td>
      <td>0.00131385</td>
      <td>0.01017933</td>
      <td>0.00744242</td>
      <td>0.00735141</td>
      <td>0.00611644</td>
      <td>0.00000000</td>
      <td>-0.00646974</td>
      <td>0.03567570</td>
      <td>0.00746728</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-12 00:00:00+00:00</th>
      <td>0.01725375</td>
      <td>-0.00823708</td>
      <td>0.01338721</td>
      <td>0.00813289</td>
      <td>0.00000000</td>
      <td>-0.00597922</td>
      <td>-0.00101061</td>
      <td>0.02296913</td>
      <td>0.01795027</td>
      <td>0.00025710</td>
      <td>...</td>
      <td>0.00498609</td>
      <td>0.01566621</td>
      <td>0.01176334</td>
      <td>0.02718194</td>
      <td>0.00438630</td>
      <td>0.00000000</td>
      <td>0.00263106</td>
      <td>0.01474083</td>
      <td>-0.01190269</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-13 00:00:00+00:00</th>
      <td>-0.00455851</td>
      <td>0.00095465</td>
      <td>0.00303109</td>
      <td>0.00365656</td>
      <td>0.00000000</td>
      <td>0.01492537</td>
      <td>-0.00445119</td>
      <td>-0.00040011</td>
      <td>-0.00571905</td>
      <td>-0.00501221</td>
      <td>...</td>
      <td>0.03049927</td>
      <td>-0.00321668</td>
      <td>0.00169383</td>
      <td>0.00054651</td>
      <td>-0.01823475</td>
      <td>0.00000000</td>
      <td>-0.00508430</td>
      <td>-0.00466453</td>
      <td>-0.00917796</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-14 00:00:00+00:00</th>
      <td>0.00343886</td>
      <td>-0.00915594</td>
      <td>0.00302193</td>
      <td>0.00810620</td>
      <td>0.00000000</td>
      <td>0.00139452</td>
      <td>-0.01011076</td>
      <td>0.00259000</td>
      <td>0.01228280</td>
      <td>0.01982692</td>
      <td>...</td>
      <td>0.02660653</td>
      <td>0.02589425</td>
      <td>0.01474258</td>
      <td>-0.00028748</td>
      <td>0.02649446</td>
      <td>0.00000000</td>
      <td>-0.02166101</td>
      <td>0.00594885</td>
      <td>0.03317747</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-18 00:00:00+00:00</th>
      <td>0.03425353</td>
      <td>-0.06208490</td>
      <td>-0.00428562</td>
      <td>-0.02247419</td>
      <td>0.00000000</td>
      <td>0.02088872</td>
      <td>0.00662116</td>
      <td>0.00699843</td>
      <td>0.01154188</td>
      <td>0.03264518</td>
      <td>...</td>
      <td>0.00167843</td>
      <td>0.00250133</td>
      <td>0.01116324</td>
      <td>0.01158879</td>
      <td>0.00604402</td>
      <td>0.00000000</td>
      <td>0.02945339</td>
      <td>0.00699753</td>
      <td>-0.00853448</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-19 00:00:00+00:00</th>
      <td>-0.01022379</td>
      <td>-0.00892857</td>
      <td>0.00875376</td>
      <td>-0.00531448</td>
      <td>0.00000000</td>
      <td>-0.01714410</td>
      <td>0.00275342</td>
      <td>-0.00296182</td>
      <td>-0.00789936</td>
      <td>-0.02057462</td>
      <td>...</td>
      <td>-0.01483416</td>
      <td>-0.02358990</td>
      <td>-0.00596800</td>
      <td>-0.01989880</td>
      <td>-0.01284667</td>
      <td>0.00000000</td>
      <td>0.00081838</td>
      <td>-0.00409759</td>
      <td>-0.01843318</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-20 00:00:00+00:00</th>
      <td>-0.00849568</td>
      <td>0.02195299</td>
      <td>-0.00473189</td>
      <td>-0.01818900</td>
      <td>0.00000000</td>
      <td>0.00479450</td>
      <td>0.01332249</td>
      <td>0.01871257</td>
      <td>-0.01238573</td>
      <td>-0.00281761</td>
      <td>...</td>
      <td>-0.02451226</td>
      <td>0.00774353</td>
      <td>-0.00626137</td>
      <td>-0.00084112</td>
      <td>-0.03379775</td>
      <td>0.00000000</td>
      <td>-0.01318157</td>
      <td>-0.00161165</td>
      <td>-0.00797236</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-21 00:00:00+00:00</th>
      <td>0.00787281</td>
      <td>-0.04103759</td>
      <td>0.00554409</td>
      <td>-0.01791080</td>
      <td>0.00000000</td>
      <td>0.01064197</td>
      <td>-0.00085307</td>
      <td>-0.00195169</td>
      <td>-0.00656913</td>
      <td>-0.00411277</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00061472</td>
      <td>0.01582494</td>
      <td>-0.00304798</td>
      <td>-0.00087153</td>
      <td>0.00000000</td>
      <td>-0.00759032</td>
      <td>0.00932467</td>
      <td>0.02402000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-24 00:00:00+00:00</th>
      <td>0.01464622</td>
      <td>0.02747253</td>
      <td>-0.00110591</td>
      <td>0.03283704</td>
      <td>0.00000000</td>
      <td>0.00524943</td>
      <td>0.00522324</td>
      <td>0.00842018</td>
      <td>0.02284340</td>
      <td>0.01497431</td>
      <td>...</td>
      <td>0.01235897</td>
      <td>0.01601137</td>
      <td>-0.00494300</td>
      <td>0.00165968</td>
      <td>0.00804885</td>
      <td>0.00000000</td>
      <td>0.00060118</td>
      <td>-0.01650140</td>
      <td>-0.02302058</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-25 00:00:00+00:00</th>
      <td>-0.00673624</td>
      <td>0.00298231</td>
      <td>0.00914590</td>
      <td>0.01170955</td>
      <td>0.00000000</td>
      <td>-0.00936254</td>
      <td>-0.00434674</td>
      <td>0.00485935</td>
      <td>-0.01381134</td>
      <td>-0.01450491</td>
      <td>...</td>
      <td>0.00217821</td>
      <td>0.00627338</td>
      <td>0.00115375</td>
      <td>0.00113369</td>
      <td>0.01514317</td>
      <td>0.00000000</td>
      <td>-0.00620848</td>
      <td>0.01714176</td>
      <td>-0.00883613</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-26 00:00:00+00:00</th>
      <td>-0.03073582</td>
      <td>0.06613350</td>
      <td>0.00359340</td>
      <td>0.00719342</td>
      <td>0.00000000</td>
      <td>0.01222707</td>
      <td>-0.02524087</td>
      <td>0.01219180</td>
      <td>-0.00119190</td>
      <td>0.00283652</td>
      <td>...</td>
      <td>0.00262839</td>
      <td>0.00593383</td>
      <td>0.01245258</td>
      <td>0.00055168</td>
      <td>-0.07629122</td>
      <td>0.00000000</td>
      <td>-0.00480301</td>
      <td>-0.01952376</td>
      <td>-0.01062584</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-27 00:00:00+00:00</th>
      <td>0.00772081</td>
      <td>0.02317753</td>
      <td>-0.00155262</td>
      <td>-0.00187707</td>
      <td>0.00000000</td>
      <td>0.01183286</td>
      <td>-0.00792793</td>
      <td>0.00017944</td>
      <td>0.00984487</td>
      <td>0.00747981</td>
      <td>...</td>
      <td>0.01426699</td>
      <td>0.02116856</td>
      <td>0.00275077</td>
      <td>0.01639630</td>
      <td>0.02466443</td>
      <td>0.00000000</td>
      <td>-0.00374620</td>
      <td>0.06875384</td>
      <td>0.02016019</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-28 00:00:00+00:00</th>
      <td>-0.01884631</td>
      <td>-0.08055268</td>
      <td>-0.00093620</td>
      <td>-0.02070958</td>
      <td>0.00000000</td>
      <td>-0.02226215</td>
      <td>-0.01919983</td>
      <td>-0.01603463</td>
      <td>-0.04017725</td>
      <td>-0.02245999</td>
      <td>...</td>
      <td>-0.02564740</td>
      <td>-0.02010822</td>
      <td>-0.01113056</td>
      <td>-0.02187072</td>
      <td>-0.02222859</td>
      <td>0.00000000</td>
      <td>-0.02500085</td>
      <td>-0.00847214</td>
      <td>-0.01387340</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-01-31 00:00:00+00:00</th>
      <td>0.00360809</td>
      <td>-0.02361480</td>
      <td>-0.00235062</td>
      <td>0.00957845</td>
      <td>0.00000000</td>
      <td>-0.00389347</td>
      <td>-0.00724829</td>
      <td>-0.00098003</td>
      <td>0.01723607</td>
      <td>0.01381753</td>
      <td>...</td>
      <td>0.00484620</td>
      <td>0.00029849</td>
      <td>0.02139566</td>
      <td>-0.00756028</td>
      <td>0.00661503</td>
      <td>0.00000000</td>
      <td>0.00774817</td>
      <td>0.00990224</td>
      <td>0.00637836</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-01 00:00:00+00:00</th>
      <td>0.01165376</td>
      <td>-0.00104701</td>
      <td>-0.00921769</td>
      <td>0.01681783</td>
      <td>0.00000000</td>
      <td>0.01197624</td>
      <td>0.00154551</td>
      <td>0.01749823</td>
      <td>0.01391831</td>
      <td>0.02162417</td>
      <td>...</td>
      <td>0.01568687</td>
      <td>0.03200298</td>
      <td>0.04003746</td>
      <td>0.02479485</td>
      <td>0.02449777</td>
      <td>0.00000000</td>
      <td>0.01410150</td>
      <td>0.01774607</td>
      <td>0.03097047</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-02 00:00:00+00:00</th>
      <td>0.01011176</td>
      <td>-0.03930406</td>
      <td>-0.02747650</td>
      <td>-0.00205320</td>
      <td>0.00000000</td>
      <td>-0.02119705</td>
      <td>0.01106795</td>
      <td>0.00363229</td>
      <td>-0.00238735</td>
      <td>0.00227994</td>
      <td>...</td>
      <td>-0.01284550</td>
      <td>-0.00451785</td>
      <td>-0.00595828</td>
      <td>-0.01038976</td>
      <td>-0.00182689</td>
      <td>0.00000000</td>
      <td>0.00656172</td>
      <td>0.00516054</td>
      <td>-0.00370596</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-03 00:00:00+00:00</th>
      <td>-0.00028893</td>
      <td>0.00730962</td>
      <td>0.01412639</td>
      <td>-0.00256035</td>
      <td>0.00000000</td>
      <td>-0.00366196</td>
      <td>0.00589443</td>
      <td>0.00417765</td>
      <td>0.00299133</td>
      <td>-0.01334112</td>
      <td>...</td>
      <td>0.01043038</td>
      <td>-0.00816904</td>
      <td>0.00034726</td>
      <td>0.00855568</td>
      <td>0.00459592</td>
      <td>0.00000000</td>
      <td>0.03141255</td>
      <td>-0.00033292</td>
      <td>-0.00039386</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-04 00:00:00+00:00</th>
      <td>0.00562724</td>
      <td>-0.03649951</td>
      <td>0.02401434</td>
      <td>0.00891547</td>
      <td>0.00000000</td>
      <td>0.03304712</td>
      <td>0.00261602</td>
      <td>-0.00436050</td>
      <td>-0.00507009</td>
      <td>0.01965916</td>
      <td>...</td>
      <td>0.00947084</td>
      <td>0.02470898</td>
      <td>-0.00191681</td>
      <td>0.00304817</td>
      <td>-0.00550607</td>
      <td>0.00000000</td>
      <td>0.00140817</td>
      <td>0.00247147</td>
      <td>0.01611067</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-07 00:00:00+00:00</th>
      <td>0.00770895</td>
      <td>0.05204586</td>
      <td>0.00811404</td>
      <td>0.01553804</td>
      <td>0.00000000</td>
      <td>-0.00217765</td>
      <td>-0.00934092</td>
      <td>0.00227918</td>
      <td>0.00599520</td>
      <td>-0.00351381</td>
      <td>...</td>
      <td>0.00680069</td>
      <td>-0.00507270</td>
      <td>0.00780293</td>
      <td>0.00685187</td>
      <td>0.00276828</td>
      <td>0.00000000</td>
      <td>0.00202754</td>
      <td>-0.01087565</td>
      <td>0.02761741</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-08 00:00:00+00:00</th>
      <td>0.01085425</td>
      <td>0.01645475</td>
      <td>0.00620226</td>
      <td>0.00943966</td>
      <td>0.00000000</td>
      <td>0.00218240</td>
      <td>-0.00173831</td>
      <td>-0.00055735</td>
      <td>0.00029797</td>
      <td>-0.00600987</td>
      <td>...</td>
      <td>0.00384577</td>
      <td>0.00179527</td>
      <td>-0.00607698</td>
      <td>0.00518223</td>
      <td>-0.00276064</td>
      <td>0.00000000</td>
      <td>0.00385105</td>
      <td>-0.00049496</td>
      <td>0.00477967</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-09 00:00:00+00:00</th>
      <td>0.00466351</td>
      <td>0.00000000</td>
      <td>0.01695500</td>
      <td>0.00833204</td>
      <td>0.00000000</td>
      <td>0.00300577</td>
      <td>-0.00153026</td>
      <td>0.00113763</td>
      <td>-0.01668156</td>
      <td>0.00478144</td>
      <td>...</td>
      <td>-0.01183694</td>
      <td>-0.00179205</td>
      <td>-0.00517814</td>
      <td>-0.01844088</td>
      <td>0.00370461</td>
      <td>0.00000000</td>
      <td>-0.00182061</td>
      <td>-0.00985108</td>
      <td>-0.00475694</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-10 00:00:00+00:00</th>
      <td>0.00041298</td>
      <td>-0.00304846</td>
      <td>-0.01136679</td>
      <td>-0.01010922</td>
      <td>0.00000000</td>
      <td>0.00110085</td>
      <td>-0.00110982</td>
      <td>0.00550344</td>
      <td>0.01696456</td>
      <td>0.00451308</td>
      <td>...</td>
      <td>-0.00894677</td>
      <td>0.00391368</td>
      <td>0.00787593</td>
      <td>0.00551211</td>
      <td>-0.00462381</td>
      <td>0.00000000</td>
      <td>0.00485295</td>
      <td>0.01144950</td>
      <td>-0.02649784</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-11 00:00:00+00:00</th>
      <td>-0.00714982</td>
      <td>0.02836356</td>
      <td>0.00076442</td>
      <td>0.00650490</td>
      <td>0.00000000</td>
      <td>-0.00137455</td>
      <td>0.00153431</td>
      <td>-0.01114607</td>
      <td>0.00297885</td>
      <td>0.01500657</td>
      <td>...</td>
      <td>0.00170520</td>
      <td>0.01076538</td>
      <td>-0.00456215</td>
      <td>0.00714655</td>
      <td>0.01202070</td>
      <td>0.00000000</td>
      <td>0.00061584</td>
      <td>0.00965987</td>
      <td>0.01425557</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-14 00:00:00+00:00</th>
      <td>0.00166312</td>
      <td>-0.01579001</td>
      <td>-0.02327358</td>
      <td>0.00652903</td>
      <td>0.00000000</td>
      <td>0.00575047</td>
      <td>0.00924459</td>
      <td>0.00020168</td>
      <td>0.00564301</td>
      <td>0.00987654</td>
      <td>...</td>
      <td>-0.01161568</td>
      <td>0.00031846</td>
      <td>0.02522953</td>
      <td>-0.00544299</td>
      <td>0.00547592</td>
      <td>0.00000000</td>
      <td>0.01065725</td>
      <td>0.00248369</td>
      <td>-0.01002123</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-15 00:00:00+00:00</th>
      <td>-0.01190476</td>
      <td>0.01104282</td>
      <td>-0.00392614</td>
      <td>0.00201613</td>
      <td>0.00000000</td>
      <td>-0.00732946</td>
      <td>0.01674954</td>
      <td>-0.00802079</td>
      <td>0.00236267</td>
      <td>0.00023854</td>
      <td>...</td>
      <td>-0.00607872</td>
      <td>-0.00180403</td>
      <td>-0.02285301</td>
      <td>0.00409742</td>
      <td>0.00360404</td>
      <td>0.00000000</td>
      <td>0.00852564</td>
      <td>-0.00181453</td>
      <td>-0.00446084</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-16 00:00:00+00:00</th>
      <td>0.01512325</td>
      <td>0.00195775</td>
      <td>0.01385974</td>
      <td>0.00896684</td>
      <td>0.00000000</td>
      <td>-0.00355392</td>
      <td>-0.01050193</td>
      <td>0.02732858</td>
      <td>0.02209782</td>
      <td>-0.00390509</td>
      <td>...</td>
      <td>0.00917384</td>
      <td>0.00386265</td>
      <td>0.00868160</td>
      <td>0.00028536</td>
      <td>0.02709281</td>
      <td>0.00000000</td>
      <td>0.00889849</td>
      <td>0.01055741</td>
      <td>0.00120638</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-17 00:00:00+00:00</th>
      <td>-0.00331066</td>
      <td>-0.01779103</td>
      <td>-0.02484354</td>
      <td>-0.01330906</td>
      <td>0.00000000</td>
      <td>0.02914771</td>
      <td>0.00130066</td>
      <td>0.01178385</td>
      <td>0.00835976</td>
      <td>0.00855903</td>
      <td>...</td>
      <td>0.01565577</td>
      <td>0.00031771</td>
      <td>0.00227521</td>
      <td>-0.00191139</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00390600</td>
      <td>0.01532474</td>
      <td>-0.00322747</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2011-02-18 00:00:00+00:00</th>
      <td>0.01107771</td>
      <td>-0.02010261</td>
      <td>-0.00669325</td>
      <td>-0.02159490</td>
      <td>0.00000000</td>
      <td>0.00961998</td>
      <td>0.01210641</td>
      <td>-0.00795272</td>
      <td>0.01172098</td>
      <td>-0.00169134</td>
      <td>...</td>
      <td>0.05340361</td>
      <td>0.00144687</td>
      <td>0.00739258</td>
      <td>0.01314812</td>
      <td>-0.00438988</td>
      <td>0.00000000</td>
      <td>-0.00411045</td>
      <td>0.02378154</td>
      <td>-0.01795968</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>2015-11-20 00:00:00+00:00</th>
      <td>0.00107212</td>
      <td>-0.00237346</td>
      <td>0.00276686</td>
      <td>0.00438086</td>
      <td>0.00925624</td>
      <td>-0.00090483</td>
      <td>0.00611281</td>
      <td>0.00643014</td>
      <td>0.00054490</td>
      <td>-0.00584294</td>
      <td>...</td>
      <td>0.00813121</td>
      <td>0.00041182</td>
      <td>-0.00635194</td>
      <td>0.00279330</td>
      <td>0.00289932</td>
      <td>-0.00449783</td>
      <td>0.01505987</td>
      <td>-0.00317570</td>
      <td>0.00000000</td>
      <td>0.00894971</td>
    </tr>
    <tr>
      <th>2015-11-23 00:00:00+00:00</th>
      <td>-0.00709429</td>
      <td>0.00237910</td>
      <td>-0.00122838</td>
      <td>-0.01298872</td>
      <td>0.00064612</td>
      <td>-0.00372792</td>
      <td>-0.01238148</td>
      <td>-0.00120585</td>
      <td>0.00163381</td>
      <td>-0.04410655</td>
      <td>...</td>
      <td>-0.00469574</td>
      <td>-0.00695468</td>
      <td>0.00613134</td>
      <td>0.00734514</td>
      <td>0.02769219</td>
      <td>0.00132239</td>
      <td>-0.00096628</td>
      <td>-0.00858098</td>
      <td>-0.00199203</td>
      <td>-0.00760006</td>
    </tr>
    <tr>
      <th>2015-11-24 00:00:00+00:00</th>
      <td>0.00208486</td>
      <td>-0.02530879</td>
      <td>0.00350426</td>
      <td>0.00959410</td>
      <td>-0.00032285</td>
      <td>-0.00233603</td>
      <td>0.00020972</td>
      <td>-0.00453713</td>
      <td>0.00043497</td>
      <td>0.06374097</td>
      <td>...</td>
      <td>-0.00077707</td>
      <td>0.01295953</td>
      <td>0.01993523</td>
      <td>-0.00956300</td>
      <td>-0.01299182</td>
      <td>-0.00187091</td>
      <td>-0.00425172</td>
      <td>-0.00904325</td>
      <td>0.00264987</td>
      <td>-0.00065084</td>
    </tr>
    <tr>
      <th>2015-11-25 00:00:00+00:00</th>
      <td>-0.00820649</td>
      <td>0.00193813</td>
      <td>0.00680544</td>
      <td>-0.00715141</td>
      <td>-0.01374361</td>
      <td>0.00436515</td>
      <td>-0.00086201</td>
      <td>-0.00233759</td>
      <td>-0.00250000</td>
      <td>-0.00281048</td>
      <td>...</td>
      <td>-0.00888765</td>
      <td>-0.00445842</td>
      <td>-0.00768963</td>
      <td>-0.00279190</td>
      <td>-0.00191255</td>
      <td>0.00482386</td>
      <td>0.00289380</td>
      <td>-0.00617420</td>
      <td>-0.00030891</td>
      <td>0.00086836</td>
    </tr>
    <tr>
      <th>2015-11-27 00:00:00+00:00</th>
      <td>-0.00325586</td>
      <td>0.00920070</td>
      <td>0.00328491</td>
      <td>-0.00186283</td>
      <td>-0.00480271</td>
      <td>0.00061184</td>
      <td>0.00020986</td>
      <td>0.00336265</td>
      <td>0.00435872</td>
      <td>0.00331472</td>
      <td>...</td>
      <td>0.00473588</td>
      <td>0.00447839</td>
      <td>-0.00025651</td>
      <td>0.00263307</td>
      <td>0.00379485</td>
      <td>-0.00213974</td>
      <td>0.00510503</td>
      <td>-0.00286889</td>
      <td>0.00501270</td>
      <td>0.00234253</td>
    </tr>
    <tr>
      <th>2015-11-30 00:00:00+00:00</th>
      <td>-0.01020870</td>
      <td>-0.01032093</td>
      <td>-0.01279784</td>
      <td>0.00415919</td>
      <td>-0.03083813</td>
      <td>-0.00354229</td>
      <td>-0.01100361</td>
      <td>-0.00222774</td>
      <td>-0.00770316</td>
      <td>0.01952228</td>
      <td>...</td>
      <td>0.00421152</td>
      <td>0.00934761</td>
      <td>0.00529351</td>
      <td>-0.00736321</td>
      <td>-0.00752358</td>
      <td>-0.00692784</td>
      <td>-0.00618325</td>
      <td>0.00010131</td>
      <td>-0.00433862</td>
      <td>-0.00807150</td>
    </tr>
    <tr>
      <th>2015-12-01 00:00:00+00:00</th>
      <td>0.01574786</td>
      <td>0.04849282</td>
      <td>-0.00239635</td>
      <td>-0.00811576</td>
      <td>0.01495718</td>
      <td>0.00871792</td>
      <td>0.01202178</td>
      <td>0.00848039</td>
      <td>0.01191778</td>
      <td>-0.00097042</td>
      <td>...</td>
      <td>0.01519233</td>
      <td>0.01107484</td>
      <td>0.00282087</td>
      <td>0.02160044</td>
      <td>0.01327550</td>
      <td>0.00858179</td>
      <td>0.02716952</td>
      <td>0.01692683</td>
      <td>0.01502831</td>
      <td>0.00663191</td>
    </tr>
    <tr>
      <th>2015-12-02 00:00:00+00:00</th>
      <td>-0.00528420</td>
      <td>0.01293012</td>
      <td>-0.02716607</td>
      <td>-0.00902983</td>
      <td>-0.02202152</td>
      <td>-0.00653437</td>
      <td>-0.00528731</td>
      <td>-0.00499107</td>
      <td>-0.00572663</td>
      <td>-0.00699034</td>
      <td>...</td>
      <td>-0.00385752</td>
      <td>-0.02469292</td>
      <td>-0.02857143</td>
      <td>0.00757240</td>
      <td>-0.02996241</td>
      <td>-0.01833503</td>
      <td>0.00631281</td>
      <td>-0.00447256</td>
      <td>-0.01544806</td>
      <td>-0.01360986</td>
    </tr>
    <tr>
      <th>2015-12-03 00:00:00+00:00</th>
      <td>-0.00952117</td>
      <td>-0.01255465</td>
      <td>-0.01994438</td>
      <td>-0.00929219</td>
      <td>-0.02772394</td>
      <td>-0.00141471</td>
      <td>-0.02365007</td>
      <td>-0.01542891</td>
      <td>-0.02292980</td>
      <td>-0.02782630</td>
      <td>...</td>
      <td>-0.00829420</td>
      <td>-0.01081970</td>
      <td>-0.01432669</td>
      <td>0.00273291</td>
      <td>-0.00095925</td>
      <td>-0.00567594</td>
      <td>-0.02427203</td>
      <td>-0.02836674</td>
      <td>-0.01572478</td>
      <td>-0.02524442</td>
    </tr>
    <tr>
      <th>2015-12-04 00:00:00+00:00</th>
      <td>0.02019919</td>
      <td>0.03930296</td>
      <td>0.00677909</td>
      <td>0.03324578</td>
      <td>0.01889890</td>
      <td>0.01195750</td>
      <td>0.02604566</td>
      <td>0.02992398</td>
      <td>0.02969636</td>
      <td>0.00271314</td>
      <td>...</td>
      <td>0.02221053</td>
      <td>0.01032552</td>
      <td>0.00573563</td>
      <td>0.00749501</td>
      <td>0.01159888</td>
      <td>0.02477363</td>
      <td>0.04115927</td>
      <td>0.01197660</td>
      <td>0.02445235</td>
      <td>0.02788171</td>
    </tr>
    <tr>
      <th>2015-12-07 00:00:00+00:00</th>
      <td>-0.00033987</td>
      <td>0.01801987</td>
      <td>-0.02957813</td>
      <td>-0.00629799</td>
      <td>-0.01592051</td>
      <td>0.00089849</td>
      <td>0.00572671</td>
      <td>-0.00146283</td>
      <td>-0.03218838</td>
      <td>-0.01198796</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>-0.00879092</td>
      <td>-0.02612215</td>
      <td>-0.00190007</td>
      <td>-0.02957591</td>
      <td>-0.01964712</td>
      <td>0.00353962</td>
      <td>-0.00138396</td>
      <td>-0.04208519</td>
      <td>-0.01184133</td>
    </tr>
    <tr>
      <th>2015-12-08 00:00:00+00:00</th>
      <td>-0.02330712</td>
      <td>-0.02687583</td>
      <td>-0.00886608</td>
      <td>-0.00042489</td>
      <td>0.00711446</td>
      <td>0.00490595</td>
      <td>-0.00020917</td>
      <td>-0.00027950</td>
      <td>0.02366071</td>
      <td>-0.00821590</td>
      <td>...</td>
      <td>-0.00460567</td>
      <td>-0.00391018</td>
      <td>-0.02825109</td>
      <td>-0.01206744</td>
      <td>-0.00492958</td>
      <td>-0.01707392</td>
      <td>-0.01073476</td>
      <td>-0.00627720</td>
      <td>-0.03181317</td>
      <td>0.00066573</td>
    </tr>
    <tr>
      <th>2015-12-09 00:00:00+00:00</th>
      <td>-0.00516964</td>
      <td>-0.02021340</td>
      <td>0.02222267</td>
      <td>-0.02207699</td>
      <td>-0.01130272</td>
      <td>0.00198396</td>
      <td>-0.01294807</td>
      <td>-0.01487559</td>
      <td>-0.02354993</td>
      <td>-0.02360837</td>
      <td>...</td>
      <td>-0.01309164</td>
      <td>-0.00993443</td>
      <td>0.01338977</td>
      <td>-0.02106570</td>
      <td>-0.00986868</td>
      <td>-0.00056952</td>
      <td>-0.02367896</td>
      <td>0.00220474</td>
      <td>-0.00748954</td>
      <td>-0.01590047</td>
    </tr>
    <tr>
      <th>2015-12-10 00:00:00+00:00</th>
      <td>0.01503860</td>
      <td>0.01009224</td>
      <td>-0.00946596</td>
      <td>0.00476320</td>
      <td>-0.00446315</td>
      <td>0.01271990</td>
      <td>0.00777184</td>
      <td>0.00289674</td>
      <td>-0.00669942</td>
      <td>0.00882138</td>
      <td>...</td>
      <td>-0.00675676</td>
      <td>0.00188278</td>
      <td>0.00079770</td>
      <td>-0.00031695</td>
      <td>0.01497042</td>
      <td>0.01213779</td>
      <td>-0.00825643</td>
      <td>-0.00029673</td>
      <td>0.01475919</td>
      <td>0.01969533</td>
    </tr>
    <tr>
      <th>2015-12-11 00:00:00+00:00</th>
      <td>-0.01222670</td>
      <td>-0.04535632</td>
      <td>-0.01917906</td>
      <td>-0.02573993</td>
      <td>-0.03118548</td>
      <td>0.00127956</td>
      <td>-0.02096235</td>
      <td>-0.02137978</td>
      <td>0.02765288</td>
      <td>-0.00384301</td>
      <td>...</td>
      <td>-0.01493822</td>
      <td>-0.01271252</td>
      <td>-0.01783980</td>
      <td>-0.01775464</td>
      <td>-0.01279343</td>
      <td>-0.01306196</td>
      <td>-0.02583602</td>
      <td>-0.01011228</td>
      <td>-0.02978165</td>
      <td>-0.00585635</td>
    </tr>
    <tr>
      <th>2015-12-14 00:00:00+00:00</th>
      <td>-0.01119741</td>
      <td>-0.00761835</td>
      <td>-0.00832534</td>
      <td>-0.00618871</td>
      <td>0.02589759</td>
      <td>0.00440628</td>
      <td>0.01014465</td>
      <td>0.01007090</td>
      <td>0.02012689</td>
      <td>-0.00193824</td>
      <td>...</td>
      <td>0.00721594</td>
      <td>-0.00094052</td>
      <td>0.02273800</td>
      <td>-0.00183474</td>
      <td>-0.01791305</td>
      <td>0.01158048</td>
      <td>0.00490982</td>
      <td>0.00535594</td>
      <td>-0.01499098</td>
      <td>0.01658331</td>
    </tr>
    <tr>
      <th>2015-12-15 00:00:00+00:00</th>
      <td>0.02468348</td>
      <td>0.01976847</td>
      <td>0.05799045</td>
      <td>-0.01768577</td>
      <td>0.01713257</td>
      <td>-0.00819372</td>
      <td>0.01741535</td>
      <td>0.00338602</td>
      <td>0.00814926</td>
      <td>-0.00474296</td>
      <td>...</td>
      <td>0.01539193</td>
      <td>0.01351594</td>
      <td>0.04471023</td>
      <td>0.00435700</td>
      <td>0.01622211</td>
      <td>0.00163542</td>
      <td>0.01341047</td>
      <td>0.01578682</td>
      <td>0.03562574</td>
      <td>0.00815639</td>
    </tr>
    <tr>
      <th>2015-12-16 00:00:00+00:00</th>
      <td>0.01078027</td>
      <td>0.01419020</td>
      <td>0.02977102</td>
      <td>0.00768495</td>
      <td>0.02199833</td>
      <td>-0.00098521</td>
      <td>0.01007990</td>
      <td>0.02210700</td>
      <td>0.01637949</td>
      <td>0.01733616</td>
      <td>...</td>
      <td>0.00471295</td>
      <td>0.00053077</td>
      <td>-0.00352152</td>
      <td>0.00850674</td>
      <td>0.02493746</td>
      <td>0.02071897</td>
      <td>0.01280939</td>
      <td>0.00860603</td>
      <td>0.01075467</td>
      <td>0.00253774</td>
    </tr>
    <tr>
      <th>2015-12-17 00:00:00+00:00</th>
      <td>-0.01721238</td>
      <td>-0.01712199</td>
      <td>-0.04819014</td>
      <td>-0.02119576</td>
      <td>-0.02169610</td>
      <td>0.00738610</td>
      <td>-0.01715337</td>
      <td>-0.05335502</td>
      <td>-0.01423190</td>
      <td>-0.02450989</td>
      <td>...</td>
      <td>-0.00156361</td>
      <td>-0.01814726</td>
      <td>-0.01503666</td>
      <td>-0.00314212</td>
      <td>-0.00778738</td>
      <td>-0.02669682</td>
      <td>-0.01822419</td>
      <td>-0.01196571</td>
      <td>-0.01596035</td>
      <td>-0.00763722</td>
    </tr>
    <tr>
      <th>2015-12-18 00:00:00+00:00</th>
      <td>-0.04108447</td>
      <td>-0.03225884</td>
      <td>-0.02286262</td>
      <td>-0.02706364</td>
      <td>-0.01134153</td>
      <td>-0.00449706</td>
      <td>-0.03446098</td>
      <td>-0.01288309</td>
      <td>-0.03067941</td>
      <td>-0.01693954</td>
      <td>...</td>
      <td>-0.01901256</td>
      <td>-0.01231427</td>
      <td>-0.00872355</td>
      <td>-0.01045055</td>
      <td>-0.00394377</td>
      <td>-0.01700150</td>
      <td>-0.00499057</td>
      <td>-0.01738362</td>
      <td>-0.03784484</td>
      <td>-0.00279062</td>
    </tr>
    <tr>
      <th>2015-12-21 00:00:00+00:00</th>
      <td>0.00945523</td>
      <td>0.03186317</td>
      <td>0.00053085</td>
      <td>0.01225425</td>
      <td>0.00824462</td>
      <td>0.00991570</td>
      <td>0.00777786</td>
      <td>0.01040390</td>
      <td>0.00339503</td>
      <td>0.01196200</td>
      <td>...</td>
      <td>0.00635765</td>
      <td>0.01677569</td>
      <td>-0.00025549</td>
      <td>0.00703494</td>
      <td>0.01477910</td>
      <td>0.00835952</td>
      <td>0.02171387</td>
      <td>0.01284185</td>
      <td>0.00227072</td>
      <td>0.01589418</td>
    </tr>
    <tr>
      <th>2015-12-22 00:00:00+00:00</th>
      <td>0.01050225</td>
      <td>0.01167033</td>
      <td>-0.01175973</td>
      <td>-0.00092672</td>
      <td>0.02474629</td>
      <td>0.00261687</td>
      <td>0.00997788</td>
      <td>0.00747281</td>
      <td>0.02401222</td>
      <td>0.00332573</td>
      <td>...</td>
      <td>0.03167093</td>
      <td>0.00273487</td>
      <td>0.00505438</td>
      <td>0.01004736</td>
      <td>0.03886271</td>
      <td>0.00997684</td>
      <td>-0.00544780</td>
      <td>0.01496575</td>
      <td>0.01455341</td>
      <td>0.00802720</td>
    </tr>
    <tr>
      <th>2015-12-23 00:00:00+00:00</th>
      <td>0.01180348</td>
      <td>0.00921901</td>
      <td>0.00832501</td>
      <td>0.01286896</td>
      <td>0.01717833</td>
      <td>0.00756710</td>
      <td>0.01395006</td>
      <td>0.00636498</td>
      <td>0.00937966</td>
      <td>0.00829624</td>
      <td>...</td>
      <td>0.00919881</td>
      <td>0.00950124</td>
      <td>0.03270236</td>
      <td>0.00758616</td>
      <td>0.01119292</td>
      <td>0.01723748</td>
      <td>0.01534943</td>
      <td>0.01021896</td>
      <td>0.01877295</td>
      <td>0.00544406</td>
    </tr>
    <tr>
      <th>2015-12-24 00:00:00+00:00</th>
      <td>-0.00368236</td>
      <td>0.01202196</td>
      <td>0.00046505</td>
      <td>-0.00534053</td>
      <td>-0.00204082</td>
      <td>0.00009036</td>
      <td>0.00000000</td>
      <td>-0.00181999</td>
      <td>-0.00422386</td>
      <td>0.00567317</td>
      <td>...</td>
      <td>0.00962284</td>
      <td>-0.00062007</td>
      <td>-0.01072430</td>
      <td>-0.00212741</td>
      <td>0.00555290</td>
      <td>-0.00161385</td>
      <td>-0.00162043</td>
      <td>0.00136401</td>
      <td>0.00397518</td>
      <td>0.00312135</td>
    </tr>
    <tr>
      <th>2015-12-28 00:00:00+00:00</th>
      <td>0.00704030</td>
      <td>-0.01325882</td>
      <td>0.00952567</td>
      <td>-0.01120361</td>
      <td>0.00495300</td>
      <td>0.00230910</td>
      <td>-0.00154955</td>
      <td>-0.00144052</td>
      <td>-0.00106045</td>
      <td>-0.00616419</td>
      <td>...</td>
      <td>0.00050303</td>
      <td>-0.00106364</td>
      <td>-0.00743906</td>
      <td>0.00493013</td>
      <td>-0.02113809</td>
      <td>-0.00348374</td>
      <td>-0.00217727</td>
      <td>-0.00641306</td>
      <td>-0.00503256</td>
      <td>-0.00478388</td>
    </tr>
    <tr>
      <th>2015-12-29 00:00:00+00:00</th>
      <td>0.01944279</td>
      <td>0.00625637</td>
      <td>0.01095726</td>
      <td>0.01797599</td>
      <td>0.01191076</td>
      <td>0.00556913</td>
      <td>0.01754180</td>
      <td>0.01191401</td>
      <td>0.01199575</td>
      <td>0.01522413</td>
      <td>...</td>
      <td>0.01381318</td>
      <td>0.00796362</td>
      <td>0.00533553</td>
      <td>0.01143615</td>
      <td>0.01128297</td>
      <td>0.00430697</td>
      <td>0.00541538</td>
      <td>0.00723499</td>
      <td>0.00617376</td>
      <td>0.00899694</td>
    </tr>
    <tr>
      <th>2015-12-30 00:00:00+00:00</th>
      <td>-0.00638405</td>
      <td>-0.01608535</td>
      <td>-0.00525423</td>
      <td>-0.01305616</td>
      <td>0.00590373</td>
      <td>0.00239063</td>
      <td>-0.01201673</td>
      <td>0.00512422</td>
      <td>-0.00052449</td>
      <td>-0.01325558</td>
      <td>...</td>
      <td>-0.01461683</td>
      <td>-0.00706442</td>
      <td>-0.01326109</td>
      <td>-0.00807866</td>
      <td>0.00184720</td>
      <td>-0.00618212</td>
      <td>-0.00578080</td>
      <td>-0.00292090</td>
      <td>-0.01223479</td>
      <td>-0.00145450</td>
    </tr>
    <tr>
      <th>2015-12-31 00:00:00+00:00</th>
      <td>-0.01243206</td>
      <td>-0.01053186</td>
      <td>-0.00587919</td>
      <td>-0.01919944</td>
      <td>-0.00937219</td>
      <td>-0.01248112</td>
      <td>-0.00795266</td>
      <td>-0.01284442</td>
      <td>-0.01406381</td>
      <td>-0.02174525</td>
      <td>...</td>
      <td>-0.01605213</td>
      <td>-0.01817456</td>
      <td>-0.00205030</td>
      <td>-0.00911914</td>
      <td>-0.00837082</td>
      <td>-0.01003138</td>
      <td>-0.01029925</td>
      <td>0.00117577</td>
      <td>-0.00621188</td>
      <td>-0.00705088</td>
    </tr>
    <tr>
      <th>2016-01-04 00:00:00+00:00</th>
      <td>-0.02828157</td>
      <td>-0.03398810</td>
      <td>0.01149418</td>
      <td>0.00085542</td>
      <td>-0.02751240</td>
      <td>-0.01774070</td>
      <td>-0.04406668</td>
      <td>-0.02555086</td>
      <td>-0.02097083</td>
      <td>-0.01591868</td>
      <td>...</td>
      <td>-0.02476714</td>
      <td>-0.02492212</td>
      <td>-0.00627612</td>
      <td>-0.03271090</td>
      <td>-0.03105128</td>
      <td>-0.01151995</td>
      <td>-0.01148918</td>
      <td>-0.00760365</td>
      <td>-0.02161389</td>
      <td>-0.01356408</td>
    </tr>
    <tr>
      <th>2016-01-05 00:00:00+00:00</th>
      <td>0.00405845</td>
      <td>-0.00954098</td>
      <td>-0.00683002</td>
      <td>-0.02505441</td>
      <td>-0.00416936</td>
      <td>0.01462920</td>
      <td>-0.00024665</td>
      <td>0.00520704</td>
      <td>0.00402305</td>
      <td>-0.00734750</td>
      <td>...</td>
      <td>0.00209794</td>
      <td>0.01486318</td>
      <td>0.00851070</td>
      <td>0.02039022</td>
      <td>-0.00195732</td>
      <td>-0.00028634</td>
      <td>-0.00249493</td>
      <td>0.02081954</td>
      <td>-0.01085325</td>
      <td>0.01564723</td>
    </tr>
  </tbody>
</table>
<p>1256 rows × 490 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Statistical-Risk-Model">Statistical Risk Model<a class="anchor-link" href="#Statistical-Risk-Model">&#182;</a></h1><p>It's time to build the risk model. You'll be creating a statistical risk model using PCA. So, the first thing is building the PCA model.</p>
<h2 id="Fit-PCA">Fit PCA<a class="anchor-link" href="#Fit-PCA">&#182;</a></h2><p>Implement <code>fit_pca</code> to fit a PCA model to the returns data</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.decomposition</span> <span class="k">import</span> <span class="n">PCA</span>


<span class="k">def</span> <span class="nf">fit_pca</span><span class="p">(</span><span class="n">returns</span><span class="p">,</span> <span class="n">num_factor_exposures</span><span class="p">,</span> <span class="n">svd_solver</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Fit PCA model with returns.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    returns : DataFrame</span>
<span class="sd">        Returns for each ticker and date</span>
<span class="sd">    num_factor_exposures : int</span>
<span class="sd">        Number of factors for PCA</span>
<span class="sd">    svd_solver: str</span>
<span class="sd">        The solver to use for the PCA model</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    pca : PCA</span>
<span class="sd">        Model fit to returns</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">PCA</span><span class="p">(</span><span class="n">n_components</span><span class="o">=</span><span class="n">num_factor_exposures</span><span class="p">,</span><span class="n">svd_solver</span><span class="o">=</span><span class="n">svd_solver</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">returns</span><span class="p">)</span>

<span class="n">project_tests</span><span class="o">.</span><span class="n">test_fit_pca</span><span class="p">(</span><span class="n">fit_pca</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what the model looks like. First, we'll look at the PCA components.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_factor_exposures</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">pca</span> <span class="o">=</span> <span class="n">fit_pca</span><span class="p">(</span><span class="n">five_year_returns</span><span class="p">,</span> <span class="n">num_factor_exposures</span><span class="p">,</span> <span class="s1">&#39;full&#39;</span><span class="p">)</span>

<span class="n">pca</span><span class="o">.</span><span class="n">components_</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[9]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([[-0.04316847, -0.05874471, -0.03433256, ..., -0.03843904,
        -0.06092493, -0.01367163],
       [ 0.01955111,  0.19637679,  0.03451503, ...,  0.01749339,
        -0.01044197,  0.01892192],
       [-0.00993375,  0.07868756,  0.01133839, ..., -0.0157519 ,
         0.01261759,  0.01867875],
       ...,
       [-0.01174265,  0.01398085,  0.05143999, ...,  0.04125323,
         0.0035229 ,  0.03682367],
       [ 0.00526925, -0.04680674,  0.05716915, ...,  0.00671842,
        -0.02193923,  0.00833979],
       [-0.00535269, -0.01599057,  0.08414961, ..., -0.01540844,
         0.02188794,  0.01500221]])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Let's also look at the PCA's percent of variance explained by each factor</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">num_factor_exposures</span><span class="p">),</span> <span class="n">pca</span><span class="o">.</span><span class="n">explained_variance_ratio_</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[10]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;Container object of 20 artists&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>You will see that the first factor dominates. The precise definition of each factor in a latent model is unknown, however we can guess at the likely interpretation.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Factor-Betas">Factor Betas<a class="anchor-link" href="#Factor-Betas">&#182;</a></h2><p>Implement <code>factor_betas</code> to get the factor betas from the PCA model.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">factor_betas</span><span class="p">(</span><span class="n">pca</span><span class="p">,</span> <span class="n">factor_beta_indices</span><span class="p">,</span> <span class="n">factor_beta_columns</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the factor betas from the PCA model.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    pca : PCA</span>
<span class="sd">        Model fit to returns</span>
<span class="sd">    factor_beta_indices : 1 dimensional Ndarray</span>
<span class="sd">        Factor beta indices</span>
<span class="sd">    factor_beta_columns : 1 dimensional Ndarray</span>
<span class="sd">        Factor beta columns</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factor_betas : DataFrame</span>
<span class="sd">        Factor betas</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">factor_beta_indices</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">factor_beta_columns</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
    
    <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">pca</span><span class="o">.</span><span class="n">components_</span><span class="o">.</span><span class="n">T</span><span class="p">,</span><span class="n">factor_beta_indices</span><span class="p">,</span><span class="n">factor_beta_columns</span><span class="p">)</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_factor_betas</span><span class="p">(</span><span class="n">factor_betas</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's view the factor betas from this model.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">risk_model</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">factor_betas</span><span class="p">(</span><span class="n">pca</span><span class="p">,</span> <span class="n">five_year_returns</span><span class="o">.</span><span class="n">columns</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">num_factor_exposures</span><span class="p">))</span>

<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">]</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[12]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th>7</th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
      <th>12</th>
      <th>13</th>
      <th>14</th>
      <th>15</th>
      <th>16</th>
      <th>17</th>
      <th>18</th>
      <th>19</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Equity(0 [A])</th>
      <td>-0.04316847</td>
      <td>0.01955111</td>
      <td>-0.00993375</td>
      <td>0.01054038</td>
      <td>-0.01819821</td>
      <td>0.01074517</td>
      <td>0.00112915</td>
      <td>0.03973914</td>
      <td>-0.01380519</td>
      <td>0.01273651</td>
      <td>-0.02384028</td>
      <td>-0.00141663</td>
      <td>0.02099338</td>
      <td>0.03460997</td>
      <td>-0.03048936</td>
      <td>0.03360635</td>
      <td>-0.01142920</td>
      <td>-0.01174265</td>
      <td>0.00526925</td>
      <td>-0.00535269</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>-0.05874471</td>
      <td>0.19637679</td>
      <td>0.07868756</td>
      <td>0.08209582</td>
      <td>0.34847826</td>
      <td>-0.13808246</td>
      <td>0.07129285</td>
      <td>0.10524788</td>
      <td>-0.04588957</td>
      <td>-0.08547793</td>
      <td>0.00328328</td>
      <td>0.10534284</td>
      <td>0.06721603</td>
      <td>-0.04405955</td>
      <td>-0.02231617</td>
      <td>0.01726309</td>
      <td>-0.03310836</td>
      <td>0.01398085</td>
      <td>-0.04680674</td>
      <td>-0.01599057</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>-0.03433256</td>
      <td>0.03451503</td>
      <td>0.01133839</td>
      <td>-0.02543666</td>
      <td>-0.00817211</td>
      <td>-0.01318319</td>
      <td>-0.06095238</td>
      <td>0.00654915</td>
      <td>-0.03265404</td>
      <td>-0.01351522</td>
      <td>0.02896685</td>
      <td>0.03836520</td>
      <td>-0.04960451</td>
      <td>-0.00524576</td>
      <td>-0.02196994</td>
      <td>0.02976718</td>
      <td>-0.01163585</td>
      <td>0.05143999</td>
      <td>0.05716915</td>
      <td>0.08414961</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>-0.03409988</td>
      <td>-0.00139319</td>
      <td>0.03946700</td>
      <td>-0.01721303</td>
      <td>-0.03046983</td>
      <td>-0.01757067</td>
      <td>0.02325117</td>
      <td>0.01142987</td>
      <td>-0.02656849</td>
      <td>-0.00771904</td>
      <td>0.02686350</td>
      <td>0.00731877</td>
      <td>0.00481832</td>
      <td>0.01288623</td>
      <td>0.05256513</td>
      <td>-0.07344470</td>
      <td>-0.03179158</td>
      <td>0.09079374</td>
      <td>-0.01118851</td>
      <td>0.04291373</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>-0.01803099</td>
      <td>0.02568151</td>
      <td>0.00435183</td>
      <td>-0.07078179</td>
      <td>0.01319937</td>
      <td>0.05427710</td>
      <td>-0.01567842</td>
      <td>0.04046172</td>
      <td>-0.01245487</td>
      <td>-0.03515086</td>
      <td>-0.05132433</td>
      <td>-0.04041614</td>
      <td>-0.05120320</td>
      <td>-0.01858166</td>
      <td>-0.01126857</td>
      <td>-0.04200714</td>
      <td>0.01588559</td>
      <td>0.04598554</td>
      <td>0.01599288</td>
      <td>0.06587978</td>
    </tr>
    <tr>
      <th>Equity(5 [ABC])</th>
      <td>-0.02890016</td>
      <td>0.03259161</td>
      <td>-0.00742074</td>
      <td>-0.03355183</td>
      <td>-0.01152149</td>
      <td>0.02648421</td>
      <td>0.01084965</td>
      <td>-0.00570393</td>
      <td>0.01354800</td>
      <td>-0.02967931</td>
      <td>-0.03161765</td>
      <td>0.01715152</td>
      <td>-0.00304998</td>
      <td>0.02635564</td>
      <td>0.00787900</td>
      <td>0.00833106</td>
      <td>-0.01834622</td>
      <td>-0.01391370</td>
      <td>0.01062042</td>
      <td>-0.02739565</td>
    </tr>
    <tr>
      <th>Equity(6 [ABT])</th>
      <td>-0.02905740</td>
      <td>0.02977821</td>
      <td>-0.02970871</td>
      <td>-0.03574263</td>
      <td>-0.01157351</td>
      <td>0.06020073</td>
      <td>-0.02004042</td>
      <td>0.04098522</td>
      <td>-0.01803987</td>
      <td>-0.00620785</td>
      <td>-0.03157790</td>
      <td>-0.02308041</td>
      <td>-0.01436789</td>
      <td>-0.00054254</td>
      <td>-0.01932887</td>
      <td>0.01428819</td>
      <td>-0.03938064</td>
      <td>0.01071208</td>
      <td>0.01712006</td>
      <td>0.00210689</td>
    </tr>
    <tr>
      <th>Equity(7 [ACN])</th>
      <td>-0.04337745</td>
      <td>0.00256907</td>
      <td>0.00413229</td>
      <td>-0.00349265</td>
      <td>-0.05430743</td>
      <td>0.00537434</td>
      <td>0.00277996</td>
      <td>0.03043220</td>
      <td>-0.01880168</td>
      <td>-0.00178336</td>
      <td>-0.03540357</td>
      <td>-0.01093170</td>
      <td>0.02611241</td>
      <td>-0.01233115</td>
      <td>0.00322097</td>
      <td>0.01770011</td>
      <td>-0.00285123</td>
      <td>-0.01235874</td>
      <td>-0.01400935</td>
      <td>-0.03855653</td>
    </tr>
    <tr>
      <th>Equity(8 [ADBE])</th>
      <td>-0.04730285</td>
      <td>0.02661175</td>
      <td>0.03057072</td>
      <td>-0.02114690</td>
      <td>-0.04838794</td>
      <td>-0.00708698</td>
      <td>0.00743385</td>
      <td>0.00747095</td>
      <td>0.01487098</td>
      <td>-0.00153422</td>
      <td>-0.01238383</td>
      <td>-0.00667442</td>
      <td>0.03500718</td>
      <td>-0.04336579</td>
      <td>0.01060255</td>
      <td>-0.00637875</td>
      <td>0.02127339</td>
      <td>-0.03638845</td>
      <td>0.00126811</td>
      <td>-0.04844555</td>
    </tr>
    <tr>
      <th>Equity(9 [ADI])</th>
      <td>-0.04712287</td>
      <td>-0.00381150</td>
      <td>0.05600847</td>
      <td>-0.01553775</td>
      <td>-0.06946243</td>
      <td>-0.00560418</td>
      <td>0.10070366</td>
      <td>0.06307694</td>
      <td>0.00160769</td>
      <td>0.01912993</td>
      <td>0.01101680</td>
      <td>0.00348733</td>
      <td>-0.05465749</td>
      <td>-0.04223802</td>
      <td>-0.00014275</td>
      <td>-0.04843166</td>
      <td>0.00374282</td>
      <td>0.04583322</td>
      <td>0.01483456</td>
      <td>0.00768623</td>
    </tr>
    <tr>
      <th>Equity(10 [ADM])</th>
      <td>-0.04375945</td>
      <td>-0.01130045</td>
      <td>-0.03457005</td>
      <td>0.00400541</td>
      <td>-0.00645333</td>
      <td>0.01746845</td>
      <td>-0.00146122</td>
      <td>0.04177642</td>
      <td>-0.00478644</td>
      <td>-0.01859623</td>
      <td>0.00422432</td>
      <td>-0.00952513</td>
      <td>-0.01336835</td>
      <td>0.01753074</td>
      <td>0.00993158</td>
      <td>0.02405739</td>
      <td>-0.02009143</td>
      <td>-0.00246866</td>
      <td>0.00264238</td>
      <td>-0.00851815</td>
    </tr>
    <tr>
      <th>Equity(11 [ADP])</th>
      <td>-0.03648136</td>
      <td>0.02528125</td>
      <td>-0.01114832</td>
      <td>-0.00940984</td>
      <td>-0.03357614</td>
      <td>0.02887659</td>
      <td>-0.00509280</td>
      <td>0.04466799</td>
      <td>-0.00676480</td>
      <td>0.00335015</td>
      <td>-0.00493401</td>
      <td>0.00194010</td>
      <td>-0.01057350</td>
      <td>-0.00616905</td>
      <td>-0.00351046</td>
      <td>-0.00218630</td>
      <td>-0.00363522</td>
      <td>0.00584571</td>
      <td>0.00578868</td>
      <td>-0.02465380</td>
    </tr>
    <tr>
      <th>Equity(12 [ADS])</th>
      <td>-0.04136654</td>
      <td>0.01659887</td>
      <td>0.01716323</td>
      <td>-0.02418717</td>
      <td>-0.00389740</td>
      <td>0.00098181</td>
      <td>-0.02299563</td>
      <td>0.01316338</td>
      <td>-0.02790599</td>
      <td>0.00654660</td>
      <td>0.00628604</td>
      <td>-0.00342924</td>
      <td>0.01596979</td>
      <td>-0.02290249</td>
      <td>0.01812681</td>
      <td>0.00269984</td>
      <td>-0.01166061</td>
      <td>-0.02387829</td>
      <td>-0.01844799</td>
      <td>0.02639087</td>
    </tr>
    <tr>
      <th>Equity(13 [ADSK])</th>
      <td>-0.06028785</td>
      <td>0.01995266</td>
      <td>0.05164356</td>
      <td>0.00105689</td>
      <td>-0.06889175</td>
      <td>-0.04893180</td>
      <td>0.04706144</td>
      <td>-0.02746946</td>
      <td>0.00290438</td>
      <td>0.00534281</td>
      <td>-0.01150281</td>
      <td>-0.00105789</td>
      <td>0.04046916</td>
      <td>-0.03266419</td>
      <td>0.02070996</td>
      <td>0.02100687</td>
      <td>0.05625388</td>
      <td>-0.06442852</td>
      <td>-0.03374250</td>
      <td>-0.02718282</td>
    </tr>
    <tr>
      <th>Equity(14 [AEE])</th>
      <td>-0.02646901</td>
      <td>0.02222316</td>
      <td>-0.10714999</td>
      <td>-0.03824488</td>
      <td>-0.00157895</td>
      <td>-0.02310383</td>
      <td>0.02412315</td>
      <td>0.04419314</td>
      <td>0.00041473</td>
      <td>-0.02597657</td>
      <td>0.02325386</td>
      <td>-0.05456489</td>
      <td>0.00729924</td>
      <td>-0.00884432</td>
      <td>0.02876494</td>
      <td>0.02575176</td>
      <td>0.03531642</td>
      <td>-0.00801202</td>
      <td>-0.03297087</td>
      <td>-0.03074790</td>
    </tr>
    <tr>
      <th>Equity(15 [AEP])</th>
      <td>-0.02263370</td>
      <td>0.01880106</td>
      <td>-0.10030310</td>
      <td>-0.04210462</td>
      <td>0.00205558</td>
      <td>-0.03150526</td>
      <td>0.02496444</td>
      <td>0.05473617</td>
      <td>0.00166554</td>
      <td>-0.02261936</td>
      <td>0.01766823</td>
      <td>-0.04791054</td>
      <td>-0.01334963</td>
      <td>-0.00584932</td>
      <td>0.03513664</td>
      <td>0.02664964</td>
      <td>0.03949487</td>
      <td>0.00571290</td>
      <td>-0.01621889</td>
      <td>-0.01421124</td>
    </tr>
    <tr>
      <th>Equity(16 [AES])</th>
      <td>-0.04557539</td>
      <td>-0.01859287</td>
      <td>-0.06960047</td>
      <td>-0.02023102</td>
      <td>0.01303429</td>
      <td>-0.01748403</td>
      <td>0.02894033</td>
      <td>0.03053573</td>
      <td>-0.01228381</td>
      <td>-0.02623395</td>
      <td>0.00383933</td>
      <td>-0.05881947</td>
      <td>-0.01427757</td>
      <td>0.01071751</td>
      <td>0.04800697</td>
      <td>0.00823278</td>
      <td>0.00968720</td>
      <td>-0.02229136</td>
      <td>-0.05731240</td>
      <td>-0.01503171</td>
    </tr>
    <tr>
      <th>Equity(17 [AET])</th>
      <td>-0.04072498</td>
      <td>0.02731997</td>
      <td>-0.00507231</td>
      <td>-0.02802199</td>
      <td>-0.00180323</td>
      <td>0.06383735</td>
      <td>0.00044765</td>
      <td>-0.03716524</td>
      <td>0.00999656</td>
      <td>-0.09646860</td>
      <td>-0.04571407</td>
      <td>0.04559328</td>
      <td>-0.08527159</td>
      <td>0.06484179</td>
      <td>-0.07164819</td>
      <td>0.00852602</td>
      <td>0.01958565</td>
      <td>0.00069996</td>
      <td>0.00650320</td>
      <td>-0.05091908</td>
    </tr>
    <tr>
      <th>Equity(18 [AFL])</th>
      <td>-0.05336864</td>
      <td>0.00134653</td>
      <td>-0.02782496</td>
      <td>0.06688998</td>
      <td>-0.01355109</td>
      <td>0.04111821</td>
      <td>-0.00401011</td>
      <td>-0.01388700</td>
      <td>0.01362724</td>
      <td>0.00343990</td>
      <td>-0.00993833</td>
      <td>-0.00945988</td>
      <td>0.01378441</td>
      <td>-0.00676370</td>
      <td>0.00047075</td>
      <td>0.00042919</td>
      <td>0.00010718</td>
      <td>0.00397769</td>
      <td>0.01677661</td>
      <td>-0.03209361</td>
    </tr>
    <tr>
      <th>Equity(19 [AGN])</th>
      <td>-0.03534102</td>
      <td>0.04465091</td>
      <td>0.02264084</td>
      <td>-0.09556088</td>
      <td>0.02867567</td>
      <td>0.06515425</td>
      <td>-0.02264216</td>
      <td>-0.01928860</td>
      <td>-0.02379115</td>
      <td>-0.02578767</td>
      <td>-0.02640179</td>
      <td>-0.00734949</td>
      <td>-0.01375720</td>
      <td>0.01729325</td>
      <td>0.00910558</td>
      <td>0.01765223</td>
      <td>-0.02289392</td>
      <td>0.02583835</td>
      <td>-0.02092126</td>
      <td>0.01964563</td>
    </tr>
    <tr>
      <th>Equity(20 [AIG])</th>
      <td>-0.05982324</td>
      <td>0.00588515</td>
      <td>-0.01162873</td>
      <td>0.06668318</td>
      <td>0.01385338</td>
      <td>0.04010201</td>
      <td>-0.01874280</td>
      <td>-0.02394864</td>
      <td>0.01457678</td>
      <td>0.02061950</td>
      <td>-0.00588748</td>
      <td>-0.01886738</td>
      <td>-0.00536267</td>
      <td>-0.02808023</td>
      <td>0.03227634</td>
      <td>-0.01100650</td>
      <td>-0.00994737</td>
      <td>-0.04884961</td>
      <td>-0.01447059</td>
      <td>-0.00092722</td>
    </tr>
    <tr>
      <th>Equity(21 [AIV])</th>
      <td>-0.04111735</td>
      <td>0.03100207</td>
      <td>-0.10211708</td>
      <td>-0.00919327</td>
      <td>0.01055402</td>
      <td>-0.04739093</td>
      <td>0.05244727</td>
      <td>-0.09495931</td>
      <td>0.04963087</td>
      <td>0.00394508</td>
      <td>0.02486556</td>
      <td>0.02540802</td>
      <td>0.02094801</td>
      <td>-0.04206507</td>
      <td>-0.02048654</td>
      <td>-0.03732772</td>
      <td>-0.01518008</td>
      <td>0.02499635</td>
      <td>0.04526409</td>
      <td>0.06168561</td>
    </tr>
    <tr>
      <th>Equity(22 [AIZ])</th>
      <td>-0.04150874</td>
      <td>0.01695771</td>
      <td>-0.03297298</td>
      <td>0.04770347</td>
      <td>-0.00003273</td>
      <td>0.04220872</td>
      <td>-0.00295921</td>
      <td>0.01717020</td>
      <td>0.02192818</td>
      <td>-0.01979049</td>
      <td>0.00845285</td>
      <td>-0.00209358</td>
      <td>-0.02121338</td>
      <td>-0.01017076</td>
      <td>0.02874684</td>
      <td>0.01121282</td>
      <td>0.00889890</td>
      <td>-0.01278457</td>
      <td>0.00035505</td>
      <td>0.00788631</td>
    </tr>
    <tr>
      <th>Equity(23 [AJG])</th>
      <td>-0.03351812</td>
      <td>0.01723113</td>
      <td>-0.02538602</td>
      <td>0.01303842</td>
      <td>-0.00670008</td>
      <td>0.02117990</td>
      <td>-0.01015869</td>
      <td>0.00117300</td>
      <td>0.00768045</td>
      <td>0.00434263</td>
      <td>-0.00824876</td>
      <td>0.01520847</td>
      <td>-0.00142810</td>
      <td>-0.00802982</td>
      <td>-0.00533986</td>
      <td>-0.00140466</td>
      <td>-0.00386327</td>
      <td>-0.01466289</td>
      <td>-0.00523534</td>
      <td>0.01165450</td>
    </tr>
    <tr>
      <th>Equity(24 [AKAM])</th>
      <td>-0.05587884</td>
      <td>0.00798596</td>
      <td>0.06670064</td>
      <td>-0.00705542</td>
      <td>-0.05149731</td>
      <td>-0.04837770</td>
      <td>0.02745032</td>
      <td>-0.00620225</td>
      <td>0.02668695</td>
      <td>-0.01154353</td>
      <td>0.00107161</td>
      <td>-0.06366032</td>
      <td>-0.07429360</td>
      <td>0.00240076</td>
      <td>0.12416841</td>
      <td>0.13836518</td>
      <td>0.00667736</td>
      <td>0.00052245</td>
      <td>-0.00203434</td>
      <td>0.04370206</td>
    </tr>
    <tr>
      <th>Equity(25 [ALB])</th>
      <td>-0.05982022</td>
      <td>-0.03657577</td>
      <td>0.01798669</td>
      <td>0.01363477</td>
      <td>-0.01737160</td>
      <td>-0.03079886</td>
      <td>0.04201500</td>
      <td>0.00605395</td>
      <td>-0.02047597</td>
      <td>0.03736635</td>
      <td>-0.00136191</td>
      <td>0.01865916</td>
      <td>0.04131905</td>
      <td>0.09156602</td>
      <td>-0.06656052</td>
      <td>-0.01740400</td>
      <td>-0.04603229</td>
      <td>-0.02452548</td>
      <td>-0.02975526</td>
      <td>0.05708918</td>
    </tr>
    <tr>
      <th>Equity(26 [ALGN])</th>
      <td>-0.05959262</td>
      <td>0.01420686</td>
      <td>0.04030645</td>
      <td>-0.00223610</td>
      <td>0.00381377</td>
      <td>0.03559561</td>
      <td>0.04027152</td>
      <td>-0.09389473</td>
      <td>0.03501042</td>
      <td>0.00979674</td>
      <td>-0.07400799</td>
      <td>0.02204550</td>
      <td>0.10784517</td>
      <td>0.07096981</td>
      <td>-0.05965948</td>
      <td>-0.06617279</td>
      <td>0.04902407</td>
      <td>0.00156817</td>
      <td>-0.03738565</td>
      <td>-0.00223241</td>
    </tr>
    <tr>
      <th>Equity(27 [ALK])</th>
      <td>-0.04887994</td>
      <td>0.12134700</td>
      <td>0.03971829</td>
      <td>0.02356295</td>
      <td>0.12648496</td>
      <td>-0.05703822</td>
      <td>0.02168427</td>
      <td>0.06427147</td>
      <td>-0.01679148</td>
      <td>-0.02374091</td>
      <td>-0.00059277</td>
      <td>0.06395819</td>
      <td>0.00033085</td>
      <td>0.00597074</td>
      <td>0.01458408</td>
      <td>0.02170190</td>
      <td>0.04257028</td>
      <td>0.00789058</td>
      <td>0.04963085</td>
      <td>-0.04169300</td>
    </tr>
    <tr>
      <th>Equity(28 [ALL])</th>
      <td>-0.03960459</td>
      <td>0.01388579</td>
      <td>-0.04298737</td>
      <td>0.04705234</td>
      <td>-0.00073028</td>
      <td>0.03487833</td>
      <td>-0.01156382</td>
      <td>0.00877075</td>
      <td>-0.00074882</td>
      <td>-0.00128949</td>
      <td>0.01279480</td>
      <td>-0.00687101</td>
      <td>-0.00986285</td>
      <td>-0.00905731</td>
      <td>0.02499562</td>
      <td>-0.00494904</td>
      <td>-0.00115539</td>
      <td>0.00082421</td>
      <td>0.00224048</td>
      <td>-0.00639780</td>
    </tr>
    <tr>
      <th>Equity(29 [ALLE])</th>
      <td>-0.01215236</td>
      <td>0.01485340</td>
      <td>0.01783511</td>
      <td>-0.02151478</td>
      <td>0.00049741</td>
      <td>0.02208048</td>
      <td>-0.01396758</td>
      <td>0.04557020</td>
      <td>-0.01575920</td>
      <td>0.00225117</td>
      <td>-0.01540340</td>
      <td>-0.02608136</td>
      <td>-0.00635063</td>
      <td>-0.04124458</td>
      <td>-0.00784737</td>
      <td>-0.01976681</td>
      <td>-0.00865976</td>
      <td>0.03592991</td>
      <td>0.00767178</td>
      <td>0.03158662</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Equity(460 [VRSN])</th>
      <td>-0.03899324</td>
      <td>0.01109333</td>
      <td>0.04065347</td>
      <td>-0.01351021</td>
      <td>-0.03906872</td>
      <td>0.00844214</td>
      <td>0.01232426</td>
      <td>-0.02031680</td>
      <td>-0.01427350</td>
      <td>-0.00833205</td>
      <td>-0.02485455</td>
      <td>0.02115889</td>
      <td>0.00062521</td>
      <td>0.01354571</td>
      <td>0.02242982</td>
      <td>0.03594197</td>
      <td>-0.00752310</td>
      <td>-0.00611545</td>
      <td>-0.02595021</td>
      <td>-0.00005537</td>
    </tr>
    <tr>
      <th>Equity(461 [VRTX])</th>
      <td>-0.04909379</td>
      <td>0.09821506</td>
      <td>0.07490354</td>
      <td>-0.22874272</td>
      <td>0.18286011</td>
      <td>0.29795662</td>
      <td>0.16783749</td>
      <td>-0.08588784</td>
      <td>0.17241447</td>
      <td>0.26880311</td>
      <td>0.58246071</td>
      <td>-0.03464001</td>
      <td>-0.12627708</td>
      <td>0.36184696</td>
      <td>-0.14161962</td>
      <td>-0.10440960</td>
      <td>0.15669116</td>
      <td>0.00258548</td>
      <td>0.05374391</td>
      <td>-0.10088761</td>
    </tr>
    <tr>
      <th>Equity(462 [VTR])</th>
      <td>-0.03291326</td>
      <td>0.03068907</td>
      <td>-0.12174007</td>
      <td>-0.03757317</td>
      <td>-0.00091457</td>
      <td>-0.05384826</td>
      <td>0.03088016</td>
      <td>-0.06663125</td>
      <td>0.04680683</td>
      <td>0.00814737</td>
      <td>-0.00367371</td>
      <td>0.02294498</td>
      <td>0.02497163</td>
      <td>-0.03310961</td>
      <td>-0.01353316</td>
      <td>-0.02038055</td>
      <td>-0.02035280</td>
      <td>-0.00581734</td>
      <td>0.04174183</td>
      <td>0.02905358</td>
    </tr>
    <tr>
      <th>Equity(463 [VZ])</th>
      <td>-0.07033190</td>
      <td>0.00068427</td>
      <td>-0.01610414</td>
      <td>0.05981359</td>
      <td>-0.01922444</td>
      <td>0.03298870</td>
      <td>-0.00089302</td>
      <td>-0.00205798</td>
      <td>0.03346385</td>
      <td>-0.00820052</td>
      <td>0.01313467</td>
      <td>-0.01333200</td>
      <td>0.00415716</td>
      <td>-0.00898788</td>
      <td>0.00645221</td>
      <td>-0.01738755</td>
      <td>0.00335631</td>
      <td>-0.03321116</td>
      <td>-0.03424556</td>
      <td>-0.02031272</td>
    </tr>
    <tr>
      <th>Equity(464 [WAT])</th>
      <td>-0.04787963</td>
      <td>0.01976102</td>
      <td>0.00630830</td>
      <td>-0.01309650</td>
      <td>-0.02786813</td>
      <td>0.02969891</td>
      <td>0.01135497</td>
      <td>-0.01289454</td>
      <td>0.02281688</td>
      <td>0.00205729</td>
      <td>-0.05584809</td>
      <td>0.02544186</td>
      <td>0.02317906</td>
      <td>0.01111012</td>
      <td>-0.03735916</td>
      <td>0.03053670</td>
      <td>-0.01161567</td>
      <td>0.05062677</td>
      <td>-0.01607733</td>
      <td>-0.02896756</td>
    </tr>
    <tr>
      <th>Equity(465 [WBA])</th>
      <td>-0.03065220</td>
      <td>0.03421533</td>
      <td>-0.01027997</td>
      <td>-0.04006665</td>
      <td>-0.01725655</td>
      <td>0.02037446</td>
      <td>-0.00923922</td>
      <td>0.04976024</td>
      <td>-0.02415684</td>
      <td>-0.02906100</td>
      <td>-0.01704871</td>
      <td>-0.00978625</td>
      <td>-0.02967145</td>
      <td>-0.00855083</td>
      <td>-0.02413786</td>
      <td>0.01716925</td>
      <td>0.02913337</td>
      <td>0.03131836</td>
      <td>0.01484323</td>
      <td>0.00683342</td>
    </tr>
    <tr>
      <th>Equity(466 [WDC])</th>
      <td>-0.05340806</td>
      <td>-0.00776436</td>
      <td>0.06117296</td>
      <td>-0.01397300</td>
      <td>-0.02898379</td>
      <td>-0.05151527</td>
      <td>0.10653647</td>
      <td>0.00360483</td>
      <td>-0.00177534</td>
      <td>-0.01754129</td>
      <td>0.03043852</td>
      <td>-0.00839301</td>
      <td>-0.11248908</td>
      <td>0.02938310</td>
      <td>0.13499041</td>
      <td>0.17141412</td>
      <td>0.11221658</td>
      <td>-0.22112989</td>
      <td>-0.05340130</td>
      <td>0.27231589</td>
    </tr>
    <tr>
      <th>Equity(467 [WEC])</th>
      <td>-0.02279115</td>
      <td>0.02557593</td>
      <td>-0.10491696</td>
      <td>-0.04691482</td>
      <td>-0.00109145</td>
      <td>-0.02887550</td>
      <td>0.01886320</td>
      <td>0.05105952</td>
      <td>0.01033805</td>
      <td>-0.02583748</td>
      <td>0.02240632</td>
      <td>-0.04433949</td>
      <td>0.00086058</td>
      <td>-0.01721494</td>
      <td>0.02251708</td>
      <td>0.01433085</td>
      <td>0.04781420</td>
      <td>-0.01020607</td>
      <td>-0.01687023</td>
      <td>-0.01798607</td>
    </tr>
    <tr>
      <th>Equity(468 [WFC])</th>
      <td>-0.05131308</td>
      <td>0.01109305</td>
      <td>-0.03096455</td>
      <td>0.08514607</td>
      <td>0.00399898</td>
      <td>0.06168940</td>
      <td>-0.01917540</td>
      <td>-0.00980213</td>
      <td>0.02012808</td>
      <td>0.00922159</td>
      <td>0.02755224</td>
      <td>-0.01813056</td>
      <td>-0.00880242</td>
      <td>-0.02231278</td>
      <td>0.02429464</td>
      <td>0.00372331</td>
      <td>-0.00454128</td>
      <td>0.00335586</td>
      <td>-0.02606330</td>
      <td>0.01015222</td>
    </tr>
    <tr>
      <th>Equity(469 [WHR])</th>
      <td>-0.05507142</td>
      <td>0.03637282</td>
      <td>-0.00100598</td>
      <td>0.00590479</td>
      <td>0.01092658</td>
      <td>-0.06423664</td>
      <td>-0.05592381</td>
      <td>0.02535313</td>
      <td>-0.04216377</td>
      <td>0.13444741</td>
      <td>-0.01648804</td>
      <td>0.01561092</td>
      <td>-0.05450337</td>
      <td>0.04108206</td>
      <td>0.04115321</td>
      <td>0.02808061</td>
      <td>0.04912976</td>
      <td>0.02732405</td>
      <td>0.01817701</td>
      <td>0.01086811</td>
    </tr>
    <tr>
      <th>Equity(471 [WM])</th>
      <td>-0.03151644</td>
      <td>0.01496675</td>
      <td>-0.03234348</td>
      <td>-0.00111937</td>
      <td>-0.02960532</td>
      <td>0.00379175</td>
      <td>-0.00185568</td>
      <td>0.01331670</td>
      <td>-0.00239896</td>
      <td>-0.00938471</td>
      <td>0.00277936</td>
      <td>0.00920572</td>
      <td>-0.00692979</td>
      <td>0.03223594</td>
      <td>-0.01134834</td>
      <td>0.03628231</td>
      <td>0.01820702</td>
      <td>-0.01988943</td>
      <td>0.02403495</td>
      <td>0.01042652</td>
    </tr>
    <tr>
      <th>Equity(472 [WMB])</th>
      <td>-0.05476156</td>
      <td>-0.08924998</td>
      <td>-0.02426238</td>
      <td>-0.05723889</td>
      <td>0.07886307</td>
      <td>-0.01255032</td>
      <td>-0.03519116</td>
      <td>0.02300738</td>
      <td>-0.03160335</td>
      <td>-0.02914851</td>
      <td>0.00854960</td>
      <td>0.01996384</td>
      <td>-0.01039337</td>
      <td>-0.00287563</td>
      <td>0.03826935</td>
      <td>-0.02475861</td>
      <td>-0.02989245</td>
      <td>-0.01712986</td>
      <td>-0.10290158</td>
      <td>-0.01224658</td>
    </tr>
    <tr>
      <th>Equity(473 [WMT])</th>
      <td>-0.01988671</td>
      <td>0.03467415</td>
      <td>-0.04017193</td>
      <td>-0.00769646</td>
      <td>-0.01460066</td>
      <td>0.00726635</td>
      <td>-0.02275936</td>
      <td>0.03829212</td>
      <td>-0.01129245</td>
      <td>-0.00761002</td>
      <td>0.00867345</td>
      <td>0.00383922</td>
      <td>-0.04340883</td>
      <td>0.02467536</td>
      <td>0.01323727</td>
      <td>0.01194552</td>
      <td>-0.02497356</td>
      <td>0.00351902</td>
      <td>0.00777862</td>
      <td>0.01076198</td>
    </tr>
    <tr>
      <th>Equity(474 [WRK])</th>
      <td>-0.00563001</td>
      <td>-0.00526226</td>
      <td>0.00630657</td>
      <td>-0.00994056</td>
      <td>0.00615504</td>
      <td>0.01085219</td>
      <td>0.00188007</td>
      <td>0.01706454</td>
      <td>-0.00685762</td>
      <td>-0.00781146</td>
      <td>0.00359568</td>
      <td>-0.02948648</td>
      <td>-0.02071811</td>
      <td>0.00905441</td>
      <td>0.00186650</td>
      <td>-0.01865369</td>
      <td>-0.01239063</td>
      <td>0.02357001</td>
      <td>-0.02087232</td>
      <td>0.04046773</td>
    </tr>
    <tr>
      <th>Equity(475 [WU])</th>
      <td>-0.04059879</td>
      <td>0.00365919</td>
      <td>0.01271940</td>
      <td>0.00231537</td>
      <td>-0.01726731</td>
      <td>0.03143078</td>
      <td>0.02344129</td>
      <td>0.01431019</td>
      <td>-0.02394147</td>
      <td>-0.00790867</td>
      <td>-0.02335012</td>
      <td>-0.00977388</td>
      <td>-0.00331322</td>
      <td>-0.02121476</td>
      <td>0.00574640</td>
      <td>-0.03553201</td>
      <td>-0.00661356</td>
      <td>-0.03045924</td>
      <td>0.00995369</td>
      <td>-0.04708063</td>
    </tr>
    <tr>
      <th>Equity(476 [WY])</th>
      <td>-0.04860757</td>
      <td>0.01225382</td>
      <td>-0.04997087</td>
      <td>0.00551805</td>
      <td>-0.00278578</td>
      <td>-0.03035081</td>
      <td>0.01706471</td>
      <td>-0.04454320</td>
      <td>0.02067441</td>
      <td>0.04950772</td>
      <td>-0.02155464</td>
      <td>-0.01867393</td>
      <td>-0.00268823</td>
      <td>0.02518978</td>
      <td>-0.01532718</td>
      <td>-0.02625075</td>
      <td>-0.02418712</td>
      <td>0.00957536</td>
      <td>0.01679332</td>
      <td>-0.00412955</td>
    </tr>
    <tr>
      <th>Equity(477 [WYN])</th>
      <td>-0.05535480</td>
      <td>0.02642294</td>
      <td>0.00304199</td>
      <td>-0.00979668</td>
      <td>-0.00616717</td>
      <td>-0.02917053</td>
      <td>-0.01685646</td>
      <td>-0.03459347</td>
      <td>-0.04851210</td>
      <td>-0.00714578</td>
      <td>0.02188880</td>
      <td>0.02067000</td>
      <td>0.01051755</td>
      <td>0.02073259</td>
      <td>0.01106532</td>
      <td>0.01470477</td>
      <td>-0.00226587</td>
      <td>-0.02256858</td>
      <td>-0.03784605</td>
      <td>-0.01748119</td>
    </tr>
    <tr>
      <th>Equity(478 [WYNN])</th>
      <td>-0.06224023</td>
      <td>-0.03777009</td>
      <td>0.05699233</td>
      <td>-0.04984462</td>
      <td>0.00328186</td>
      <td>-0.05450135</td>
      <td>-0.01461477</td>
      <td>-0.13651307</td>
      <td>-0.10364775</td>
      <td>-0.13173348</td>
      <td>0.08154700</td>
      <td>-0.21134975</td>
      <td>0.05793940</td>
      <td>0.06955993</td>
      <td>-0.05215021</td>
      <td>0.00468932</td>
      <td>-0.04338772</td>
      <td>0.14131780</td>
      <td>-0.02504257</td>
      <td>0.02417878</td>
    </tr>
    <tr>
      <th>Equity(479 [XEC])</th>
      <td>-0.06269690</td>
      <td>-0.17159838</td>
      <td>0.01127251</td>
      <td>-0.03690692</td>
      <td>0.07210881</td>
      <td>0.04237735</td>
      <td>-0.01733096</td>
      <td>-0.00894589</td>
      <td>-0.00116263</td>
      <td>-0.04083135</td>
      <td>0.00912637</td>
      <td>0.02183445</td>
      <td>-0.00217537</td>
      <td>-0.10441731</td>
      <td>-0.05669005</td>
      <td>0.00593931</td>
      <td>0.06575714</td>
      <td>-0.03770747</td>
      <td>0.09486709</td>
      <td>-0.06387098</td>
    </tr>
    <tr>
      <th>Equity(480 [XEL])</th>
      <td>-0.02213358</td>
      <td>0.02037290</td>
      <td>-0.09965905</td>
      <td>-0.04339570</td>
      <td>-0.00356988</td>
      <td>-0.02492272</td>
      <td>0.01491957</td>
      <td>0.05105363</td>
      <td>-0.00024236</td>
      <td>-0.02451330</td>
      <td>0.01835319</td>
      <td>-0.05349810</td>
      <td>-0.00097559</td>
      <td>-0.00596671</td>
      <td>0.02197929</td>
      <td>0.01863163</td>
      <td>0.04664665</td>
      <td>-0.00826953</td>
      <td>-0.01791475</td>
      <td>-0.02072648</td>
    </tr>
    <tr>
      <th>Equity(481 [XL])</th>
      <td>-0.04533940</td>
      <td>0.01070557</td>
      <td>-0.03511721</td>
      <td>0.04642140</td>
      <td>-0.00583933</td>
      <td>0.01175012</td>
      <td>0.01269465</td>
      <td>-0.02088638</td>
      <td>0.01106751</td>
      <td>-0.00003951</td>
      <td>0.00649962</td>
      <td>0.00959532</td>
      <td>0.00151969</td>
      <td>-0.00052693</td>
      <td>0.00744188</td>
      <td>0.01978538</td>
      <td>-0.00164444</td>
      <td>0.00315162</td>
      <td>0.00519293</td>
      <td>-0.03064259</td>
    </tr>
    <tr>
      <th>Equity(482 [XLNX])</th>
      <td>-0.04210479</td>
      <td>-0.00382104</td>
      <td>0.05760794</td>
      <td>-0.01871999</td>
      <td>-0.06972723</td>
      <td>-0.01255952</td>
      <td>0.09049018</td>
      <td>0.05367295</td>
      <td>0.00001376</td>
      <td>0.00960728</td>
      <td>0.01455370</td>
      <td>0.00163722</td>
      <td>-0.03587944</td>
      <td>-0.04241793</td>
      <td>0.00144974</td>
      <td>-0.03148143</td>
      <td>0.03558220</td>
      <td>0.01661543</td>
      <td>0.01022713</td>
      <td>-0.00396583</td>
    </tr>
    <tr>
      <th>Equity(483 [XOM])</th>
      <td>-0.03773468</td>
      <td>-0.05378131</td>
      <td>-0.03367517</td>
      <td>-0.01036467</td>
      <td>-0.00395082</td>
      <td>0.02952766</td>
      <td>-0.00565258</td>
      <td>0.04906130</td>
      <td>0.00089804</td>
      <td>-0.00311029</td>
      <td>-0.00739458</td>
      <td>-0.01164590</td>
      <td>-0.01051455</td>
      <td>0.01413654</td>
      <td>0.00286959</td>
      <td>0.00192552</td>
      <td>-0.00324646</td>
      <td>0.00012369</td>
      <td>0.01694194</td>
      <td>0.01003126</td>
    </tr>
    <tr>
      <th>Equity(484 [XRAY])</th>
      <td>-0.04417162</td>
      <td>0.01778874</td>
      <td>-0.00062230</td>
      <td>0.00814409</td>
      <td>-0.02933804</td>
      <td>0.01859296</td>
      <td>0.01513543</td>
      <td>-0.00291478</td>
      <td>-0.00638183</td>
      <td>-0.00958277</td>
      <td>-0.01879890</td>
      <td>0.00101476</td>
      <td>0.01167483</td>
      <td>0.02288506</td>
      <td>-0.02825392</td>
      <td>0.01102642</td>
      <td>0.01849776</td>
      <td>0.00975355</td>
      <td>0.00668087</td>
      <td>-0.04636686</td>
    </tr>
    <tr>
      <th>Equity(485 [XRX])</th>
      <td>-0.05418096</td>
      <td>-0.00344402</td>
      <td>0.01002127</td>
      <td>0.02970052</td>
      <td>-0.04632619</td>
      <td>0.01414187</td>
      <td>0.01544957</td>
      <td>0.03335353</td>
      <td>-0.00134738</td>
      <td>-0.03200626</td>
      <td>-0.00744424</td>
      <td>-0.01931881</td>
      <td>-0.03324697</td>
      <td>0.01915283</td>
      <td>-0.01067988</td>
      <td>-0.01247793</td>
      <td>0.00098390</td>
      <td>-0.04865041</td>
      <td>0.01743092</td>
      <td>0.00666409</td>
    </tr>
    <tr>
      <th>Equity(486 [XYL])</th>
      <td>-0.02818794</td>
      <td>-0.01716654</td>
      <td>0.03265037</td>
      <td>-0.01947739</td>
      <td>-0.00284445</td>
      <td>0.00870998</td>
      <td>-0.01888604</td>
      <td>0.06659425</td>
      <td>-0.02409194</td>
      <td>0.03602542</td>
      <td>-0.02482881</td>
      <td>-0.03921085</td>
      <td>-0.00964275</td>
      <td>-0.04118213</td>
      <td>-0.05878742</td>
      <td>-0.02300320</td>
      <td>0.00625647</td>
      <td>0.04733302</td>
      <td>-0.00256510</td>
      <td>0.04937012</td>
    </tr>
    <tr>
      <th>Equity(487 [YUM])</th>
      <td>-0.03630261</td>
      <td>0.02726148</td>
      <td>0.00226076</td>
      <td>-0.02614444</td>
      <td>-0.01418528</td>
      <td>0.00132929</td>
      <td>-0.04156624</td>
      <td>0.00017706</td>
      <td>-0.03049746</td>
      <td>-0.02788495</td>
      <td>0.01280995</td>
      <td>0.00298781</td>
      <td>-0.01235304</td>
      <td>0.00926070</td>
      <td>0.00035906</td>
      <td>-0.00496092</td>
      <td>-0.01453755</td>
      <td>0.01909012</td>
      <td>-0.01126627</td>
      <td>-0.00177409</td>
    </tr>
    <tr>
      <th>Equity(488 [ZBH])</th>
      <td>-0.03843904</td>
      <td>0.01749339</td>
      <td>-0.01575190</td>
      <td>-0.01540756</td>
      <td>-0.00162086</td>
      <td>0.04604255</td>
      <td>0.00107619</td>
      <td>-0.00762158</td>
      <td>0.00942745</td>
      <td>-0.01275463</td>
      <td>-0.06637911</td>
      <td>-0.01112025</td>
      <td>-0.02675098</td>
      <td>0.01827896</td>
      <td>-0.04768582</td>
      <td>0.01395948</td>
      <td>0.01018115</td>
      <td>0.04125323</td>
      <td>0.00671842</td>
      <td>-0.01540844</td>
    </tr>
    <tr>
      <th>Equity(489 [ZION])</th>
      <td>-0.06092493</td>
      <td>-0.01044197</td>
      <td>0.01261759</td>
      <td>0.13419161</td>
      <td>0.02396471</td>
      <td>0.09232022</td>
      <td>-0.04477488</td>
      <td>-0.03030878</td>
      <td>0.03194794</td>
      <td>-0.01095035</td>
      <td>0.04091415</td>
      <td>-0.01621729</td>
      <td>-0.01158269</td>
      <td>-0.03556539</td>
      <td>0.00554836</td>
      <td>-0.00341750</td>
      <td>0.00706111</td>
      <td>0.00352290</td>
      <td>-0.02193923</td>
      <td>0.02188794</td>
    </tr>
    <tr>
      <th>Equity(490 [ZTS])</th>
      <td>-0.01367163</td>
      <td>0.01892192</td>
      <td>0.01867875</td>
      <td>-0.04878703</td>
      <td>0.01263697</td>
      <td>0.04831930</td>
      <td>-0.00205544</td>
      <td>0.01613385</td>
      <td>-0.01918963</td>
      <td>-0.03072014</td>
      <td>-0.04031418</td>
      <td>-0.03085290</td>
      <td>-0.05612824</td>
      <td>-0.01541907</td>
      <td>0.00108249</td>
      <td>-0.02396138</td>
      <td>-0.01026795</td>
      <td>0.03682367</td>
      <td>0.00833979</td>
      <td>0.01500221</td>
    </tr>
  </tbody>
</table>
<p>490 rows × 20 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Factor-Returns">Factor Returns<a class="anchor-link" href="#Factor-Returns">&#182;</a></h2><p>Implement <code>factor_returns</code> to get the factor returns from the PCA model using the returns data.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[13]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">factor_returns</span><span class="p">(</span><span class="n">pca</span><span class="p">,</span> <span class="n">returns</span><span class="p">,</span> <span class="n">factor_return_indices</span><span class="p">,</span> <span class="n">factor_return_columns</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the factor returns from the PCA model.</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    pca : PCA</span>
<span class="sd">        Model fit to returns</span>
<span class="sd">    returns : DataFrame</span>
<span class="sd">        Returns for each ticker and date</span>
<span class="sd">    factor_return_indices : 1 dimensional Ndarray</span>
<span class="sd">        Factor return indices</span>
<span class="sd">    factor_return_columns : 1 dimensional Ndarray</span>
<span class="sd">        Factor return columns</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factor_returns : DataFrame</span>
<span class="sd">        Factor returns</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">factor_return_indices</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">factor_return_columns</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
    
    <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">pca</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span><span class="n">returns</span><span class="p">),</span><span class="n">factor_return_indices</span><span class="p">,</span><span class="n">factor_return_columns</span><span class="p">)</span>

<span class="n">project_tests</span><span class="o">.</span><span class="n">test_factor_returns</span><span class="p">(</span><span class="n">factor_returns</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what these factor returns looks like over time.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[14]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_returns&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">factor_returns</span><span class="p">(</span>
    <span class="n">pca</span><span class="p">,</span>
    <span class="n">five_year_returns</span><span class="p">,</span>
    <span class="n">five_year_returns</span><span class="o">.</span><span class="n">index</span><span class="p">,</span>
    <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">num_factor_exposures</span><span class="p">))</span>

<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_returns&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">cumsum</span><span class="p">()</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[14]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54f28baf98&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Factor-Covariance-Matrix">Factor Covariance Matrix<a class="anchor-link" href="#Factor-Covariance-Matrix">&#182;</a></h2><p>Implement <code>factor_cov_matrix</code> to get the factor covariance matrix.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[15]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">factor_cov_matrix</span><span class="p">(</span><span class="n">factor_returns</span><span class="p">,</span> <span class="n">ann_factor</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the factor covariance matrix</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    factor_returns : DataFrame</span>
<span class="sd">        Factor returns</span>
<span class="sd">    ann_factor : int</span>
<span class="sd">        Annualization factor</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factor_cov_matrix : 2 dimensional Ndarray</span>
<span class="sd">        Factor covariance matrix</span>
<span class="sd">    &quot;&quot;&quot;</span>
    
    <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">factor_returns</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span><span class="n">ddof</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">ann_factor</span><span class="p">)</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_factor_cov_matrix</span><span class="p">(</span><span class="n">factor_cov_matrix</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[16]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">ann_factor</span> <span class="o">=</span> <span class="mi">252</span>
<span class="c1"># risk_model[&#39;factor_cov_matrix&#39;] = factor_cov_matrix(risk_model[&#39;factor_returns&#39;], ann_factor)</span>
<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">factor_cov_matrix</span><span class="p">(</span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_returns&#39;</span><span class="p">],</span> <span class="n">ann_factor</span><span class="p">))</span>

<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">]</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[16]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>0</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>4</th>
      <th>5</th>
      <th>6</th>
      <th>7</th>
      <th>8</th>
      <th>9</th>
      <th>10</th>
      <th>11</th>
      <th>12</th>
      <th>13</th>
      <th>14</th>
      <th>15</th>
      <th>16</th>
      <th>17</th>
      <th>18</th>
      <th>19</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>14.01830425</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>1</th>
      <td>0.00000000</td>
      <td>1.10591127</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>2</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.77099145</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>3</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.61798821</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>4</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.47589087</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>5</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.43653315</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>6</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.38732470</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>7</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.34930223</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>8</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.34350302</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>9</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.31674219</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>10</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.28186803</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>11</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.27627450</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>12</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.26857691</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>13</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.24981278</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>14</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.23329965</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>15</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.21393011</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>16</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.20845473</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>17</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.19480492</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>18</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.19126517</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>19</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.18725609</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Idiosyncratic-Variance-Matrix">Idiosyncratic Variance Matrix<a class="anchor-link" href="#Idiosyncratic-Variance-Matrix">&#182;</a></h2><p>Implement <code>idiosyncratic_var_matrix</code> to get the idiosyncratic variance matrix.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[17]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">idiosyncratic_var_matrix</span><span class="p">(</span><span class="n">returns</span><span class="p">,</span> <span class="n">factor_returns</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">ann_factor</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the idiosyncratic variance matrix</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    returns : DataFrame</span>
<span class="sd">        Returns for each ticker and date</span>
<span class="sd">    factor_returns : DataFrame</span>
<span class="sd">        Factor returns</span>
<span class="sd">    factor_betas : DataFrame</span>
<span class="sd">        Factor betas</span>
<span class="sd">    ann_factor : int</span>
<span class="sd">        Annualization factor</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    idiosyncratic_var_matrix : DataFrame</span>
<span class="sd">        Idiosyncratic variance matrix</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">returns_common</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">factor_returns</span><span class="p">,</span> <span class="n">factor_betas</span><span class="o">.</span><span class="n">T</span><span class="p">),</span>
                                   <span class="n">returns</span><span class="o">.</span><span class="n">index</span><span class="p">,</span>
                                   <span class="n">returns</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>    
    
    <span class="n">residuals</span> <span class="o">=</span> <span class="n">returns</span> <span class="o">-</span> <span class="n">returns_common</span>
    <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">residuals</span><span class="p">))</span> <span class="o">*</span> <span class="n">ann_factor</span><span class="p">,</span>
                        <span class="n">returns</span><span class="o">.</span><span class="n">columns</span><span class="p">,</span>
                        <span class="n">returns</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_idiosyncratic_var_matrix</span><span class="p">(</span><span class="n">idiosyncratic_var_matrix</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[18]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_matrix&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">idiosyncratic_var_matrix</span><span class="p">(</span><span class="n">five_year_returns</span><span class="p">,</span>
                                                                  <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_returns&#39;</span><span class="p">],</span>
                                                                  <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span>
                                                                  <span class="n">ann_factor</span><span class="p">)</span>

<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_matrix&#39;</span><span class="p">]</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[18]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Equity(0 [A])</th>
      <th>Equity(1 [AAL])</th>
      <th>Equity(2 [AAP])</th>
      <th>Equity(3 [AAPL])</th>
      <th>Equity(4 [ABBV])</th>
      <th>Equity(5 [ABC])</th>
      <th>Equity(6 [ABT])</th>
      <th>Equity(7 [ACN])</th>
      <th>Equity(8 [ADBE])</th>
      <th>Equity(9 [ADI])</th>
      <th>...</th>
      <th>Equity(481 [XL])</th>
      <th>Equity(482 [XLNX])</th>
      <th>Equity(483 [XOM])</th>
      <th>Equity(484 [XRAY])</th>
      <th>Equity(485 [XRX])</th>
      <th>Equity(486 [XYL])</th>
      <th>Equity(487 [YUM])</th>
      <th>Equity(488 [ZBH])</th>
      <th>Equity(489 [ZION])</th>
      <th>Equity(490 [ZTS])</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Equity(0 [A])</th>
      <td>0.02272535</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>0.00000000</td>
      <td>0.05190083</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.05431181</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.04801884</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.03040361</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(5 [ABC])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.01854504</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(6 [ABT])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.01481514</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(7 [ACN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.02177470</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(8 [ADBE])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.03442125</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(9 [ADI])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.01898404</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(10 [ADM])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(11 [ADP])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(12 [ADS])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(13 [ADSK])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(14 [AEE])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(15 [AEP])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(16 [AES])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(17 [AET])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(18 [AFL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(19 [AGN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(20 [AIG])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(21 [AIV])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(22 [AIZ])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(23 [AJG])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(24 [AKAM])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(25 [ALB])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(26 [ALGN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(27 [ALK])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(28 [ALL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(29 [ALLE])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>Equity(460 [VRSN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(461 [VRTX])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(462 [VTR])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(463 [VZ])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(464 [WAT])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(465 [WBA])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(466 [WDC])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(467 [WEC])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(468 [WFC])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(469 [WHR])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(471 [WM])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(472 [WMB])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(473 [WMT])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(474 [WRK])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(475 [WU])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(476 [WY])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(477 [WYN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(478 [WYNN])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(479 [XEC])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(480 [XEL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(481 [XL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.02051926</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(482 [XLNX])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.02684299</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(483 [XOM])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.01059841</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(484 [XRAY])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.01537171</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(485 [XRX])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.03946866</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(486 [XYL])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.03191603</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(487 [YUM])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.04385518</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(488 [ZBH])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.02233019</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(489 [ZION])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.02337210</td>
      <td>0.00000000</td>
    </tr>
    <tr>
      <th>Equity(490 [ZTS])</th>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>...</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.00000000</td>
      <td>0.02735075</td>
    </tr>
  </tbody>
</table>
<p>490 rows × 490 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Idiosyncratic-Variance-Vector">Idiosyncratic Variance Vector<a class="anchor-link" href="#Idiosyncratic-Variance-Vector">&#182;</a></h2><p>Implement <code>idiosyncratic_var_vector</code> to get the idiosyncratic variance Vector.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[19]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">idiosyncratic_var_vector</span><span class="p">(</span><span class="n">returns</span><span class="p">,</span> <span class="n">idiosyncratic_var_matrix</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the idiosyncratic variance vector</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    returns : DataFrame</span>
<span class="sd">        Returns for each ticker and date</span>
<span class="sd">    idiosyncratic_var_matrix : DataFrame</span>
<span class="sd">        Idiosyncratic variance matrix</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    idiosyncratic_var_vector : DataFrame</span>
<span class="sd">        Idiosyncratic variance Vector</span>
<span class="sd">    &quot;&quot;&quot;</span>    
    
    <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diagonal</span><span class="p">(</span><span class="n">idiosyncratic_var_matrix</span><span class="p">),</span> <span class="n">returns</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_idiosyncratic_var_vector</span><span class="p">(</span><span class="n">idiosyncratic_var_vector</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[20]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_vector&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">idiosyncratic_var_vector</span><span class="p">(</span><span class="n">five_year_returns</span><span class="p">,</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_matrix&#39;</span><span class="p">])</span>

<span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_vector&#39;</span><span class="p">]</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[20]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>0</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Equity(0 [A])</th>
      <td>0.02272535</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>0.05190083</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>0.05431181</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>0.04801884</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>0.03040361</td>
    </tr>
    <tr>
      <th>Equity(5 [ABC])</th>
      <td>0.01854504</td>
    </tr>
    <tr>
      <th>Equity(6 [ABT])</th>
      <td>0.01481514</td>
    </tr>
    <tr>
      <th>Equity(7 [ACN])</th>
      <td>0.02177470</td>
    </tr>
    <tr>
      <th>Equity(8 [ADBE])</th>
      <td>0.03442125</td>
    </tr>
    <tr>
      <th>Equity(9 [ADI])</th>
      <td>0.01898404</td>
    </tr>
    <tr>
      <th>Equity(10 [ADM])</th>
      <td>0.02951444</td>
    </tr>
    <tr>
      <th>Equity(11 [ADP])</th>
      <td>0.00828126</td>
    </tr>
    <tr>
      <th>Equity(12 [ADS])</th>
      <td>0.02703428</td>
    </tr>
    <tr>
      <th>Equity(13 [ADSK])</th>
      <td>0.05224263</td>
    </tr>
    <tr>
      <th>Equity(14 [AEE])</th>
      <td>0.00961462</td>
    </tr>
    <tr>
      <th>Equity(15 [AEP])</th>
      <td>0.00800376</td>
    </tr>
    <tr>
      <th>Equity(16 [AES])</th>
      <td>0.03079578</td>
    </tr>
    <tr>
      <th>Equity(17 [AET])</th>
      <td>0.03579077</td>
    </tr>
    <tr>
      <th>Equity(18 [AFL])</th>
      <td>0.01894194</td>
    </tr>
    <tr>
      <th>Equity(19 [AGN])</th>
      <td>0.04211602</td>
    </tr>
    <tr>
      <th>Equity(20 [AIG])</th>
      <td>0.03317545</td>
    </tr>
    <tr>
      <th>Equity(21 [AIV])</th>
      <td>0.01468534</td>
    </tr>
    <tr>
      <th>Equity(22 [AIZ])</th>
      <td>0.02061951</td>
    </tr>
    <tr>
      <th>Equity(23 [AJG])</th>
      <td>0.01157320</td>
    </tr>
    <tr>
      <th>Equity(24 [AKAM])</th>
      <td>0.09690009</td>
    </tr>
    <tr>
      <th>Equity(25 [ALB])</th>
      <td>0.04106647</td>
    </tr>
    <tr>
      <th>Equity(26 [ALGN])</th>
      <td>0.10508661</td>
    </tr>
    <tr>
      <th>Equity(27 [ALK])</th>
      <td>0.03388559</td>
    </tr>
    <tr>
      <th>Equity(28 [ALL])</th>
      <td>0.01674196</td>
    </tr>
    <tr>
      <th>Equity(29 [ALLE])</th>
      <td>0.01456581</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
    </tr>
    <tr>
      <th>Equity(460 [VRSN])</th>
      <td>0.04356330</td>
    </tr>
    <tr>
      <th>Equity(461 [VRTX])</th>
      <td>0.01133104</td>
    </tr>
    <tr>
      <th>Equity(462 [VTR])</th>
      <td>0.01239277</td>
    </tr>
    <tr>
      <th>Equity(463 [VZ])</th>
      <td>0.01826124</td>
    </tr>
    <tr>
      <th>Equity(464 [WAT])</th>
      <td>0.02519289</td>
    </tr>
    <tr>
      <th>Equity(465 [WBA])</th>
      <td>0.04833797</td>
    </tr>
    <tr>
      <th>Equity(466 [WDC])</th>
      <td>0.04271307</td>
    </tr>
    <tr>
      <th>Equity(467 [WEC])</th>
      <td>0.00660139</td>
    </tr>
    <tr>
      <th>Equity(468 [WFC])</th>
      <td>0.01138111</td>
    </tr>
    <tr>
      <th>Equity(469 [WHR])</th>
      <td>0.05778786</td>
    </tr>
    <tr>
      <th>Equity(471 [WM])</th>
      <td>0.01511105</td>
    </tr>
    <tr>
      <th>Equity(472 [WMB])</th>
      <td>0.05868578</td>
    </tr>
    <tr>
      <th>Equity(473 [WMT])</th>
      <td>0.01608075</td>
    </tr>
    <tr>
      <th>Equity(474 [WRK])</th>
      <td>0.00835928</td>
    </tr>
    <tr>
      <th>Equity(475 [WU])</th>
      <td>0.04770344</td>
    </tr>
    <tr>
      <th>Equity(476 [WY])</th>
      <td>0.02646036</td>
    </tr>
    <tr>
      <th>Equity(477 [WYN])</th>
      <td>0.02429392</td>
    </tr>
    <tr>
      <th>Equity(478 [WYNN])</th>
      <td>0.05814062</td>
    </tr>
    <tr>
      <th>Equity(479 [XEC])</th>
      <td>0.04861817</td>
    </tr>
    <tr>
      <th>Equity(480 [XEL])</th>
      <td>0.00534852</td>
    </tr>
    <tr>
      <th>Equity(481 [XL])</th>
      <td>0.02051926</td>
    </tr>
    <tr>
      <th>Equity(482 [XLNX])</th>
      <td>0.02684299</td>
    </tr>
    <tr>
      <th>Equity(483 [XOM])</th>
      <td>0.01059841</td>
    </tr>
    <tr>
      <th>Equity(484 [XRAY])</th>
      <td>0.01537171</td>
    </tr>
    <tr>
      <th>Equity(485 [XRX])</th>
      <td>0.03946866</td>
    </tr>
    <tr>
      <th>Equity(486 [XYL])</th>
      <td>0.03191603</td>
    </tr>
    <tr>
      <th>Equity(487 [YUM])</th>
      <td>0.04385518</td>
    </tr>
    <tr>
      <th>Equity(488 [ZBH])</th>
      <td>0.02233019</td>
    </tr>
    <tr>
      <th>Equity(489 [ZION])</th>
      <td>0.02337210</td>
    </tr>
    <tr>
      <th>Equity(490 [ZTS])</th>
      <td>0.02735075</td>
    </tr>
  </tbody>
</table>
<p>490 rows × 1 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Predict-using-the-Risk-Model">Predict using the Risk Model<a class="anchor-link" href="#Predict-using-the-Risk-Model">&#182;</a></h2><p>Using the data we calculated in the risk model, implement <code>predict_portfolio_risk</code> to predict the portfolio risk using the formula $ \sqrt{X^{T}(BFB^{T} + S)X} $ where:</p>
<ul>
<li>$ X $ is the portfolio weights</li>
<li>$ B $ is the factor betas</li>
<li>$ F $ is the factor covariance matrix</li>
<li>$ S $ is the idiosyncratic variance matrix</li>
</ul>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[21]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">predict_portfolio_risk</span><span class="p">(</span><span class="n">factor_betas</span><span class="p">,</span> <span class="n">factor_cov_matrix</span><span class="p">,</span> <span class="n">idiosyncratic_var_matrix</span><span class="p">,</span> <span class="n">weights</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the predicted portfolio risk</span>
<span class="sd">    </span>
<span class="sd">    Formula for predicted portfolio risk is sqrt(X.T(BFB.T + S)X) where:</span>
<span class="sd">      X is the portfolio weights</span>
<span class="sd">      B is the factor betas</span>
<span class="sd">      F is the factor covariance matrix</span>
<span class="sd">      S is the idiosyncratic variance matrix</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    factor_betas : DataFrame</span>
<span class="sd">        Factor betas</span>
<span class="sd">    factor_cov_matrix : 2 dimensional Ndarray</span>
<span class="sd">        Factor covariance matrix</span>
<span class="sd">    idiosyncratic_var_matrix : DataFrame</span>
<span class="sd">        Idiosyncratic variance matrix</span>
<span class="sd">    weights : DataFrame</span>
<span class="sd">        Portfolio weights</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    predicted_portfolio_risk : float</span>
<span class="sd">        Predicted portfolio risk</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">factor_cov_matrix</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span>
    
    <span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">weights</span><span class="o">.</span><span class="n">T</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">factor_betas</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">factor_cov_matrix</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">factor_betas</span><span class="o">.</span><span class="n">T</span><span class="p">))</span> <span class="o">+</span> <span class="n">idiosyncratic_var_matrix</span><span class="p">)</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">weights</span><span class="p">))</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_predict_portfolio_risk</span><span class="p">(</span><span class="n">predict_portfolio_risk</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what the portfolio risk would be if we had even weights across all stocks.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[22]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">all_weights</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">repeat</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">universe_tickers</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">universe_tickers</span><span class="p">)),</span> <span class="n">universe_tickers</span><span class="p">)</span>

<span class="n">predict_portfolio_risk</span><span class="p">(</span>
    <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span>
    <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">],</span>
    <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_matrix&#39;</span><span class="p">],</span>
    <span class="n">all_weights</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[22]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0.16094824687040474</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Create-Alpha-Factors">Create Alpha Factors<a class="anchor-link" href="#Create-Alpha-Factors">&#182;</a></h1><p>With the profile risk calculated, it's time to start working on the alpha factors. In this project, we'll create the following factors:</p>
<ul>
<li>Momentum 1 Year Factor</li>
<li>Mean Reversion 5 Day Sector Neutral Factor</li>
<li>Mean Reversion 5 Day Sector Neutral Smoothed Factor</li>
<li>Overnight Sentiment Factor</li>
<li>Overnight Sentiment Smoothed Factor</li>
</ul>
<h2 id="Momentum-1-Year-Factor">Momentum 1 Year Factor<a class="anchor-link" href="#Momentum-1-Year-Factor">&#182;</a></h2><p>Each factor will have a hypothesis that goes with it. For this factor, it is "Higher past 12-month (252 days) returns are proportional to future return." Using that hypothesis, we've generated this code:</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[23]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">zipline.pipeline.factors</span> <span class="k">import</span> <span class="n">Returns</span>

<span class="k">def</span> <span class="nf">momentum_1yr</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">Returns</span><span class="p">(</span><span class="n">window_length</span><span class="o">=</span><span class="n">window_length</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">universe</span><span class="p">)</span> \
        <span class="o">.</span><span class="n">demean</span><span class="p">(</span><span class="n">groupby</span><span class="o">=</span><span class="n">sector</span><span class="p">)</span> \
        <span class="o">.</span><span class="n">rank</span><span class="p">()</span> \
        <span class="o">.</span><span class="n">zscore</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Mean-Reversion-5-Day-Sector-Neutral-Factor">Mean Reversion 5 Day Sector Neutral Factor<a class="anchor-link" href="#Mean-Reversion-5-Day-Sector-Neutral-Factor">&#182;</a></h2><p>Now it's time for you to implement <code>mean_reversion_5day_sector_neutral</code> using the hypothesis "Short-term outperformers(underperformers) compared to their sector will revert." Use the returns data from <code>universe</code>, demean using the sector data to partition, rank, then converted to a zscore.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[24]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">mean_reversion_5day_sector_neutral</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Generate the mean reversion 5 day sector neutral factor</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    window_length : int</span>
<span class="sd">        Returns window length</span>
<span class="sd">    universe : Zipline Filter</span>
<span class="sd">        Universe of stocks filter</span>
<span class="sd">    sector : Zipline Classifier</span>
<span class="sd">        Sector classifier</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factor : Zipline Factor</span>
<span class="sd">        Mean reversion 5 day sector neutral factor</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">momentum_1yr</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span><span class="n">sector</span><span class="p">)</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_mean_reversion_5day_sector_neutral</span><span class="p">(</span><span class="n">mean_reversion_5day_sector_neutral</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Running Integration Test on pipeline:
&gt; start_dat = pd.Timestamp(&#39;2015-01-05&#39;, tz=&#39;utc&#39;)
&gt; end_date = pd.Timestamp(&#39;2015-01-07&#39;, tz=&#39;utc&#39;)
&gt; universe = AverageDollarVolume(window_length=2).top(4)
&gt; factor = mean_reversion_5day_sector_neutral(
    window_length=3,
    universe=universe,
    sector=project_helper.Sector())
&gt; pipeline.add(factor, &#39;Mean_Reversion_5Day_Sector_Neutral&#39;)
&gt; engine.run_pipeline(pipeline, start_dat, end_date)

Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what some of the factor data looks like. For calculating factors, we'll be looking back 2 years.</p>
<p><strong>Note:</strong> <em>Going back 2 years falls on a day when the market is closed. Pipeline package doesn't handle start or end dates that don't fall on days when the market is open. To fix this, we went back 2 extra days to fall on the next day when the market is open.</em></p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[25]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">factor_start_date</span> <span class="o">=</span> <span class="n">universe_end_date</span> <span class="o">-</span> <span class="n">pd</span><span class="o">.</span><span class="n">DateOffset</span><span class="p">(</span><span class="n">years</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">days</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">sector</span> <span class="o">=</span> <span class="n">project_helper</span><span class="o">.</span><span class="n">Sector</span><span class="p">()</span>
<span class="n">window_length</span> <span class="o">=</span> <span class="mi">5</span>

<span class="n">pipeline</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span><span class="n">screen</span><span class="o">=</span><span class="n">universe</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">mean_reversion_5day_sector_neutral</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">),</span>
    <span class="s1">&#39;Mean_Reversion_5Day_Sector_Neutral&#39;</span><span class="p">)</span>
<span class="n">engine</span><span class="o">.</span><span class="n">run_pipeline</span><span class="p">(</span><span class="n">pipeline</span><span class="p">,</span> <span class="n">factor_start_date</span><span class="p">,</span> <span class="n">universe_end_date</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[25]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th></th>
      <th>Mean_Reversion_5Day_Sector_Neutral</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th rowspan="30" valign="top">2014-01-03 00:00:00+00:00</th>
      <th>Equity(0 [A])</th>
      <td>0.85326482</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>1.62630815</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>0.64906469</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>1.40752230</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>1.45857233</td>
    </tr>
    <tr>
      <th>Equity(5 [ABC])</th>
      <td>0.14585723</td>
    </tr>
    <tr>
      <th>Equity(6 [ABT])</th>
      <td>-0.30630019</td>
    </tr>
    <tr>
      <th>Equity(7 [ACN])</th>
      <td>0.88243626</td>
    </tr>
    <tr>
      <th>Equity(8 [ADBE])</th>
      <td>-0.06563576</td>
    </tr>
    <tr>
      <th>Equity(9 [ADI])</th>
      <td>1.67006532</td>
    </tr>
    <tr>
      <th>Equity(10 [ADM])</th>
      <td>1.18144359</td>
    </tr>
    <tr>
      <th>Equity(11 [ADP])</th>
      <td>0.24066444</td>
    </tr>
    <tr>
      <th>Equity(12 [ADS])</th>
      <td>-1.69194391</td>
    </tr>
    <tr>
      <th>Equity(13 [ADSK])</th>
      <td>-0.35735022</td>
    </tr>
    <tr>
      <th>Equity(14 [AEE])</th>
      <td>0.34276450</td>
    </tr>
    <tr>
      <th>Equity(15 [AEP])</th>
      <td>-0.45215742</td>
    </tr>
    <tr>
      <th>Equity(16 [AES])</th>
      <td>0.50320746</td>
    </tr>
    <tr>
      <th>Equity(17 [AET])</th>
      <td>0.79492192</td>
    </tr>
    <tr>
      <th>Equity(18 [AFL])</th>
      <td>1.15227214</td>
    </tr>
    <tr>
      <th>Equity(19 [AGN])</th>
      <td>-1.48045092</td>
    </tr>
    <tr>
      <th>Equity(20 [AIG])</th>
      <td>-0.27712874</td>
    </tr>
    <tr>
      <th>Equity(21 [AIV])</th>
      <td>-0.37922881</td>
    </tr>
    <tr>
      <th>Equity(22 [AIZ])</th>
      <td>0.91890057</td>
    </tr>
    <tr>
      <th>Equity(23 [AJG])</th>
      <td>-0.82409337</td>
    </tr>
    <tr>
      <th>Equity(24 [AKAM])</th>
      <td>1.22520076</td>
    </tr>
    <tr>
      <th>Equity(25 [ALB])</th>
      <td>0.69282186</td>
    </tr>
    <tr>
      <th>Equity(26 [ALGN])</th>
      <td>1.08663639</td>
    </tr>
    <tr>
      <th>Equity(27 [ALK])</th>
      <td>-1.30542224</td>
    </tr>
    <tr>
      <th>Equity(28 [ALL])</th>
      <td>-0.48862173</td>
    </tr>
    <tr>
      <th>Equity(29 [ALLE])</th>
      <td>1.42940089</td>
    </tr>
    <tr>
      <th>...</th>
      <th>...</th>
      <td>...</td>
    </tr>
    <tr>
      <th rowspan="30" valign="top">2016-01-05 00:00:00+00:00</th>
      <th>Equity(460 [VRSN])</th>
      <td>1.48614551</td>
    </tr>
    <tr>
      <th>Equity(461 [VRTX])</th>
      <td>-1.15826688</td>
    </tr>
    <tr>
      <th>Equity(462 [VTR])</th>
      <td>-1.55742347</td>
    </tr>
    <tr>
      <th>Equity(463 [VZ])</th>
      <td>-1.42912314</td>
    </tr>
    <tr>
      <th>Equity(464 [WAT])</th>
      <td>0.47399845</td>
    </tr>
    <tr>
      <th>Equity(465 [WBA])</th>
      <td>1.21528925</td>
    </tr>
    <tr>
      <th>Equity(466 [WDC])</th>
      <td>-1.59306245</td>
    </tr>
    <tr>
      <th>Equity(467 [WEC])</th>
      <td>-0.13899203</td>
    </tr>
    <tr>
      <th>Equity(468 [WFC])</th>
      <td>0.35995371</td>
    </tr>
    <tr>
      <th>Equity(469 [WHR])</th>
      <td>-1.15113908</td>
    </tr>
    <tr>
      <th>Equity(471 [WM])</th>
      <td>0.38133710</td>
    </tr>
    <tr>
      <th>Equity(472 [WMB])</th>
      <td>-1.69285160</td>
    </tr>
    <tr>
      <th>Equity(473 [WMT])</th>
      <td>-1.52891228</td>
    </tr>
    <tr>
      <th>Equity(474 [WRK])</th>
      <td>-1.32220619</td>
    </tr>
    <tr>
      <th>Equity(475 [WU])</th>
      <td>0.54527641</td>
    </tr>
    <tr>
      <th>Equity(476 [WY])</th>
      <td>0.08196966</td>
    </tr>
    <tr>
      <th>Equity(477 [WYN])</th>
      <td>1.19390586</td>
    </tr>
    <tr>
      <th>Equity(478 [WYNN])</th>
      <td>-1.49327330</td>
    </tr>
    <tr>
      <th>Equity(479 [XEC])</th>
      <td>0.30293134</td>
    </tr>
    <tr>
      <th>Equity(480 [XEL])</th>
      <td>0.02494729</td>
    </tr>
    <tr>
      <th>Equity(481 [XL])</th>
      <td>1.06560553</td>
    </tr>
    <tr>
      <th>Equity(482 [XLNX])</th>
      <td>1.34358958</td>
    </tr>
    <tr>
      <th>Equity(483 [XOM])</th>
      <td>1.60019024</td>
    </tr>
    <tr>
      <th>Equity(484 [XRAY])</th>
      <td>1.22241705</td>
    </tr>
    <tr>
      <th>Equity(485 [XRX])</th>
      <td>0.33144252</td>
    </tr>
    <tr>
      <th>Equity(486 [XYL])</th>
      <td>-0.13186423</td>
    </tr>
    <tr>
      <th>Equity(487 [YUM])</th>
      <td>0.18175880</td>
    </tr>
    <tr>
      <th>Equity(488 [ZBH])</th>
      <td>-1.40061195</td>
    </tr>
    <tr>
      <th>Equity(489 [ZION])</th>
      <td>0.52389302</td>
    </tr>
    <tr>
      <th>Equity(490 [ZTS])</th>
      <td>-0.93730520</td>
    </tr>
  </tbody>
</table>
<p>244259 rows × 1 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Mean-Reversion-5-Day-Sector-Neutral-Smoothed-Factor">Mean Reversion 5 Day Sector Neutral Smoothed Factor<a class="anchor-link" href="#Mean-Reversion-5-Day-Sector-Neutral-Smoothed-Factor">&#182;</a></h2><p>Taking the output of the previous factor, let's create a smoothed version. Implement <code>mean_reversion_5day_sector_neutral_smoothed</code> to generate a mean reversion 5 fay sector neutral smoothed factor. Call the <code>mean_reversion_5day_sector_neutral</code> function to get the unsmoothed factor, then use <code>SimpleMovingAverage</code> function to smooth it. You'll have to apply rank and zscore again.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[26]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">zipline.pipeline.factors</span> <span class="k">import</span> <span class="n">SimpleMovingAverage</span>

<span class="k">def</span> <span class="nf">mean_reversion_5day_sector_neutral_smoothed</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Generate the mean reversion 5 day sector neutral smoothed factor</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    window_length : int</span>
<span class="sd">        Returns window length</span>
<span class="sd">    universe : Zipline Filter</span>
<span class="sd">        Universe of stocks filter</span>
<span class="sd">    sector : Zipline Classifier</span>
<span class="sd">        Sector classifier</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    factor : Zipline Factor</span>
<span class="sd">        Mean reversion 5 day sector neutral smoothed factor</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">SimpleMovingAverage</span><span class="p">(</span><span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="n">mean_reversion_5day_sector_neutral</span><span class="p">(</span><span class="n">window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">)],</span>
                               <span class="n">window_length</span><span class="o">=</span><span class="n">window_length</span><span class="p">)</span><span class="o">.</span><span class="n">rank</span><span class="p">()</span><span class="o">.</span><span class="n">zscore</span><span class="p">()</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_mean_reversion_5day_sector_neutral_smoothed</span><span class="p">(</span><span class="n">mean_reversion_5day_sector_neutral_smoothed</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Running Integration Test on pipeline:
&gt; start_dat = pd.Timestamp(&#39;2015-01-05&#39;, tz=&#39;utc&#39;)
&gt; end_date = pd.Timestamp(&#39;2015-01-07&#39;, tz=&#39;utc&#39;)
&gt; universe = AverageDollarVolume(window_length=2).top(4)
&gt; factor = mean_reversion_5day_sector_neutral_smoothed(
    window_length=3,
    universe=universe,
    sector=project_helper.Sector())
&gt; pipeline.add(factor, &#39;Mean_Reversion_5Day_Sector_Neutral_Smoothed&#39;)
&gt; engine.run_pipeline(pipeline, start_dat, end_date)

Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what some of the smoothed data looks like.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[27]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">pipeline</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span><span class="n">screen</span><span class="o">=</span><span class="n">universe</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">mean_reversion_5day_sector_neutral_smoothed</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">),</span>
    <span class="s1">&#39;Mean_Reversion_5Day_Sector_Neutral_Smoothed&#39;</span><span class="p">)</span>
<span class="n">engine</span><span class="o">.</span><span class="n">run_pipeline</span><span class="p">(</span><span class="n">pipeline</span><span class="p">,</span> <span class="n">factor_start_date</span><span class="p">,</span> <span class="n">universe_end_date</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[27]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th></th>
      <th>Mean_Reversion_5Day_Sector_Neutral_Smoothed</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th rowspan="30" valign="top">2014-01-03 00:00:00+00:00</th>
      <th>Equity(0 [A])</th>
      <td>1.11580784</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>1.72840822</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>1.34188655</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>0.91160771</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>0.96265774</td>
    </tr>
    <tr>
      <th>Equity(5 [ABC])</th>
      <td>0.77304334</td>
    </tr>
    <tr>
      <th>Equity(6 [ABT])</th>
      <td>0.48862173</td>
    </tr>
    <tr>
      <th>Equity(7 [ACN])</th>
      <td>-0.45945029</td>
    </tr>
    <tr>
      <th>Equity(8 [ADBE])</th>
      <td>0.81680051</td>
    </tr>
    <tr>
      <th>Equity(9 [ADI])</th>
      <td>0.94807202</td>
    </tr>
    <tr>
      <th>Equity(10 [ADM])</th>
      <td>0.73657903</td>
    </tr>
    <tr>
      <th>Equity(11 [ADP])</th>
      <td>0.32088591</td>
    </tr>
    <tr>
      <th>Equity(12 [ADS])</th>
      <td>-1.59713671</td>
    </tr>
    <tr>
      <th>Equity(13 [ADSK])</th>
      <td>0.08022148</td>
    </tr>
    <tr>
      <th>Equity(14 [AEE])</th>
      <td>0.11668579</td>
    </tr>
    <tr>
      <th>Equity(15 [AEP])</th>
      <td>0.21878585</td>
    </tr>
    <tr>
      <th>Equity(16 [AES])</th>
      <td>-0.75116475</td>
    </tr>
    <tr>
      <th>Equity(17 [AET])</th>
      <td>-1.09392925</td>
    </tr>
    <tr>
      <th>Equity(18 [AFL])</th>
      <td>-0.07292862</td>
    </tr>
    <tr>
      <th>Equity(19 [AGN])</th>
      <td>-0.37922881</td>
    </tr>
    <tr>
      <th>Equity(20 [AIG])</th>
      <td>1.05017208</td>
    </tr>
    <tr>
      <th>Equity(21 [AIV])</th>
      <td>-0.14585723</td>
    </tr>
    <tr>
      <th>Equity(22 [AIZ])</th>
      <td>0.67094327</td>
    </tr>
    <tr>
      <th>Equity(23 [AJG])</th>
      <td>-0.56155035</td>
    </tr>
    <tr>
      <th>Equity(24 [AKAM])</th>
      <td>1.67735818</td>
    </tr>
    <tr>
      <th>Equity(25 [ALB])</th>
      <td>1.35647227</td>
    </tr>
    <tr>
      <th>Equity(26 [ALGN])</th>
      <td>1.32730082</td>
    </tr>
    <tr>
      <th>Equity(27 [ALK])</th>
      <td>0.57613607</td>
    </tr>
    <tr>
      <th>Equity(28 [ALL])</th>
      <td>0.02187859</td>
    </tr>
    <tr>
      <th>Equity(29 [ALLE])</th>
      <td>1.65547960</td>
    </tr>
    <tr>
      <th>...</th>
      <th>...</th>
      <td>...</td>
    </tr>
    <tr>
      <th rowspan="30" valign="top">2016-01-05 00:00:00+00:00</th>
      <th>Equity(460 [VRSN])</th>
      <td>1.12262790</td>
    </tr>
    <tr>
      <th>Equity(461 [VRTX])</th>
      <td>-1.62157363</td>
    </tr>
    <tr>
      <th>Equity(462 [VTR])</th>
      <td>-1.60731804</td>
    </tr>
    <tr>
      <th>Equity(463 [VZ])</th>
      <td>-1.68572380</td>
    </tr>
    <tr>
      <th>Equity(464 [WAT])</th>
      <td>-1.00858316</td>
    </tr>
    <tr>
      <th>Equity(465 [WBA])</th>
      <td>0.98007198</td>
    </tr>
    <tr>
      <th>Equity(466 [WDC])</th>
      <td>-1.22241705</td>
    </tr>
    <tr>
      <th>Equity(467 [WEC])</th>
      <td>-0.78762148</td>
    </tr>
    <tr>
      <th>Equity(468 [WFC])</th>
      <td>0.72347131</td>
    </tr>
    <tr>
      <th>Equity(469 [WHR])</th>
      <td>0.37420930</td>
    </tr>
    <tr>
      <th>Equity(471 [WM])</th>
      <td>-0.53814861</td>
    </tr>
    <tr>
      <th>Equity(472 [WMB])</th>
      <td>-1.65721261</td>
    </tr>
    <tr>
      <th>Equity(473 [WMT])</th>
      <td>-1.41486754</td>
    </tr>
    <tr>
      <th>Equity(474 [WRK])</th>
      <td>-1.46476212</td>
    </tr>
    <tr>
      <th>Equity(475 [WU])</th>
      <td>1.55742347</td>
    </tr>
    <tr>
      <th>Equity(476 [WY])</th>
      <td>-0.41697608</td>
    </tr>
    <tr>
      <th>Equity(477 [WYN])</th>
      <td>0.48112624</td>
    </tr>
    <tr>
      <th>Equity(478 [WYNN])</th>
      <td>-1.36497297</td>
    </tr>
    <tr>
      <th>Equity(479 [XEC])</th>
      <td>-0.47399845</td>
    </tr>
    <tr>
      <th>Equity(480 [XEL])</th>
      <td>-0.95156079</td>
    </tr>
    <tr>
      <th>Equity(481 [XL])</th>
      <td>-0.76623809</td>
    </tr>
    <tr>
      <th>Equity(482 [XLNX])</th>
      <td>1.47188991</td>
    </tr>
    <tr>
      <th>Equity(483 [XOM])</th>
      <td>1.08698892</td>
    </tr>
    <tr>
      <th>Equity(484 [XRAY])</th>
      <td>0.10335304</td>
    </tr>
    <tr>
      <th>Equity(485 [XRX])</th>
      <td>0.98719977</td>
    </tr>
    <tr>
      <th>Equity(486 [XYL])</th>
      <td>0.66644894</td>
    </tr>
    <tr>
      <th>Equity(487 [YUM])</th>
      <td>1.07273333</td>
    </tr>
    <tr>
      <th>Equity(488 [ZBH])</th>
      <td>-0.13186423</td>
    </tr>
    <tr>
      <th>Equity(489 [ZION])</th>
      <td>0.31718693</td>
    </tr>
    <tr>
      <th>Equity(490 [ZTS])</th>
      <td>0.16750321</td>
    </tr>
  </tbody>
</table>
<p>244259 rows × 1 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Overnight-Sentiment-Factor">Overnight Sentiment Factor<a class="anchor-link" href="#Overnight-Sentiment-Factor">&#182;</a></h2><p>For this factor, were using the hypothesis from the paper <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2554010"><em>Overnight Returns and Firm-Specific Investor Sentiment</em></a>.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[28]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">zipline.pipeline.data</span> <span class="k">import</span> <span class="n">USEquityPricing</span>


<span class="k">class</span> <span class="nc">CTO</span><span class="p">(</span><span class="n">Returns</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Computes the overnight return, per hypothesis from</span>
<span class="sd">    https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2554010</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">USEquityPricing</span><span class="o">.</span><span class="n">open</span><span class="p">,</span> <span class="n">USEquityPricing</span><span class="o">.</span><span class="n">close</span><span class="p">]</span>
    
    <span class="k">def</span> <span class="nf">compute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">today</span><span class="p">,</span> <span class="n">assets</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">opens</span><span class="p">,</span> <span class="n">closes</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The opens and closes matrix is 2 rows x N assets, with the most recent at the bottom.</span>
<span class="sd">        As such, opens[-1] is the most recent open, and closes[0] is the earlier close</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="n">out</span><span class="p">[:]</span> <span class="o">=</span> <span class="p">(</span><span class="n">opens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">closes</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">/</span> <span class="n">closes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

        
<span class="k">class</span> <span class="nc">TrailingOvernightReturns</span><span class="p">(</span><span class="n">Returns</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Sum of trailing 1m O/N returns</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">window_safe</span> <span class="o">=</span> <span class="kc">True</span>
    
    <span class="k">def</span> <span class="nf">compute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">today</span><span class="p">,</span> <span class="n">asset_ids</span><span class="p">,</span> <span class="n">out</span><span class="p">,</span> <span class="n">cto</span><span class="p">):</span>
        <span class="n">out</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nansum</span><span class="p">(</span><span class="n">cto</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>

        
<span class="k">def</span> <span class="nf">overnight_sentiment</span><span class="p">(</span><span class="n">cto_window_length</span><span class="p">,</span> <span class="n">trail_overnight_returns_window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">):</span>
    <span class="n">cto_out</span> <span class="o">=</span> <span class="n">CTO</span><span class="p">(</span><span class="n">mask</span><span class="o">=</span><span class="n">universe</span><span class="p">,</span> <span class="n">window_length</span><span class="o">=</span><span class="n">cto_window_length</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">TrailingOvernightReturns</span><span class="p">(</span><span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="n">cto_out</span><span class="p">],</span> <span class="n">window_length</span><span class="o">=</span><span class="n">trail_overnight_returns_window_length</span><span class="p">)</span> \
        <span class="o">.</span><span class="n">rank</span><span class="p">()</span> \
        <span class="o">.</span><span class="n">zscore</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Overnight-Sentiment-Smoothed-Factor">Overnight Sentiment Smoothed Factor<a class="anchor-link" href="#Overnight-Sentiment-Smoothed-Factor">&#182;</a></h2><p>Just like the factor you implemented, we'll also smooth this factor.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[29]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">overnight_sentiment_smoothed</span><span class="p">(</span><span class="n">cto_window_length</span><span class="p">,</span> <span class="n">trail_overnight_returns_window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">):</span>
    <span class="n">unsmoothed_factor</span> <span class="o">=</span> <span class="n">overnight_sentiment</span><span class="p">(</span><span class="n">cto_window_length</span><span class="p">,</span> <span class="n">trail_overnight_returns_window_length</span><span class="p">,</span> <span class="n">universe</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">SimpleMovingAverage</span><span class="p">(</span><span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="n">unsmoothed_factor</span><span class="p">],</span> <span class="n">window_length</span><span class="o">=</span><span class="n">trail_overnight_returns_window_length</span><span class="p">)</span> \
        <span class="o">.</span><span class="n">rank</span><span class="p">()</span> \
        <span class="o">.</span><span class="n">zscore</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Combine-the-Factors-to-a-single-Pipeline">Combine the Factors to a single Pipeline<a class="anchor-link" href="#Combine-the-Factors-to-a-single-Pipeline">&#182;</a></h2><p>With all the factor implementations done, let's add them to a pipeline.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[30]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">universe</span> <span class="o">=</span> <span class="n">AverageDollarVolume</span><span class="p">(</span><span class="n">window_length</span><span class="o">=</span><span class="mi">120</span><span class="p">)</span><span class="o">.</span><span class="n">top</span><span class="p">(</span><span class="mi">500</span><span class="p">)</span>
<span class="n">sector</span> <span class="o">=</span> <span class="n">project_helper</span><span class="o">.</span><span class="n">Sector</span><span class="p">()</span>

<span class="n">pipeline</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span><span class="n">screen</span><span class="o">=</span><span class="n">universe</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">momentum_1yr</span><span class="p">(</span><span class="mi">252</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">),</span>
    <span class="s1">&#39;Momentum_1YR&#39;</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">mean_reversion_5day_sector_neutral</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">),</span>
    <span class="s1">&#39;Mean_Reversion_5Day_Sector_Neutral&#39;</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">mean_reversion_5day_sector_neutral_smoothed</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">universe</span><span class="p">,</span> <span class="n">sector</span><span class="p">),</span>
    <span class="s1">&#39;Mean_Reversion_5Day_Sector_Neutral_Smoothed&#39;</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">overnight_sentiment</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">universe</span><span class="p">),</span>
    <span class="s1">&#39;Overnight_Sentiment&#39;</span><span class="p">)</span>
<span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
    <span class="n">overnight_sentiment_smoothed</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="n">universe</span><span class="p">),</span>
    <span class="s1">&#39;Overnight_Sentiment_Smoothed&#39;</span><span class="p">)</span>
<span class="n">all_factors</span> <span class="o">=</span> <span class="n">engine</span><span class="o">.</span><span class="n">run_pipeline</span><span class="p">(</span><span class="n">pipeline</span><span class="p">,</span> <span class="n">factor_start_date</span><span class="p">,</span> <span class="n">universe_end_date</span><span class="p">)</span>

<span class="n">all_factors</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[30]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th></th>
      <th>Mean_Reversion_5Day_Sector_Neutral</th>
      <th>Mean_Reversion_5Day_Sector_Neutral_Smoothed</th>
      <th>Momentum_1YR</th>
      <th>Overnight_Sentiment</th>
      <th>Overnight_Sentiment_Smoothed</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th rowspan="5" valign="top">2014-01-03 00:00:00+00:00</th>
      <th>Equity(0 [A])</th>
      <td>0.85326482</td>
      <td>1.11580784</td>
      <td>1.49939067</td>
      <td>0.70659131</td>
      <td>1.11242837</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>1.62630815</td>
      <td>1.72840822</td>
      <td>1.60279693</td>
      <td>-1.70668978</td>
      <td>-1.72843105</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>0.64906469</td>
      <td>1.34188655</td>
      <td>0.37669421</td>
      <td>0.03261191</td>
      <td>-0.62687332</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>1.40752230</td>
      <td>0.91160771</td>
      <td>-1.48461835</td>
      <td>-1.67770142</td>
      <td>0.53990823</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>1.45857233</td>
      <td>0.96265774</td>
      <td>0.91588396</td>
      <td>-1.47478289</td>
      <td>-0.06160027</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Evaluate-Alpha-Factors">Evaluate Alpha Factors<a class="anchor-link" href="#Evaluate-Alpha-Factors">&#182;</a></h1><p><em>Note:</em> <em>We're evaluating the alpha factors using delay of 1</em></p>
<h2 id="Get-Pricing-Data">Get Pricing Data<a class="anchor-link" href="#Get-Pricing-Data">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[31]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">alphalens</span> <span class="k">as</span> <span class="nn">al</span>

<span class="n">assets</span> <span class="o">=</span> <span class="n">all_factors</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">levels</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">pricing</span> <span class="o">=</span> <span class="n">get_pricing</span><span class="p">(</span>
    <span class="n">data_portal</span><span class="p">,</span>
    <span class="n">trading_calendar</span><span class="p">,</span>
    <span class="n">assets</span><span class="p">,</span>
    <span class="n">factor_start_date</span><span class="p">,</span>
    <span class="n">universe_end_date</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Format-alpha-factors-and-pricing-for-Alphalens">Format alpha factors and pricing for Alphalens<a class="anchor-link" href="#Format-alpha-factors-and-pricing-for-Alphalens">&#182;</a></h2><p>In order to use a lot of the alphalens functions, we need to aligned the indices and convert the time to unix timestamp. In this next cell, we'll do just that.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[32]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">clean_factor_data</span> <span class="o">=</span> <span class="p">{</span>
    <span class="n">factor</span><span class="p">:</span> <span class="n">al</span><span class="o">.</span><span class="n">utils</span><span class="o">.</span><span class="n">get_clean_factor_and_forward_returns</span><span class="p">(</span><span class="n">factor</span><span class="o">=</span><span class="n">factor_data</span><span class="p">,</span> <span class="n">prices</span><span class="o">=</span><span class="n">pricing</span><span class="p">,</span> <span class="n">periods</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
    <span class="k">for</span> <span class="n">factor</span><span class="p">,</span> <span class="n">factor_data</span> <span class="ow">in</span> <span class="n">all_factors</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()}</span>

<span class="n">unixt_factor_data</span> <span class="o">=</span> <span class="p">{</span>
    <span class="n">factor</span><span class="p">:</span> <span class="n">factor_data</span><span class="o">.</span><span class="n">set_index</span><span class="p">(</span><span class="n">pd</span><span class="o">.</span><span class="n">MultiIndex</span><span class="o">.</span><span class="n">from_tuples</span><span class="p">(</span>
        <span class="p">[(</span><span class="n">x</span><span class="o">.</span><span class="n">timestamp</span><span class="p">(),</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">factor_data</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">values</span><span class="p">],</span>
        <span class="n">names</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;date&#39;</span><span class="p">,</span> <span class="s1">&#39;asset&#39;</span><span class="p">]))</span>
    <span class="k">for</span> <span class="n">factor</span><span class="p">,</span> <span class="n">factor_data</span> <span class="ow">in</span> <span class="n">clean_factor_data</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Dropped 1.2% entries from factor data: 1.2% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
Dropped 1.2% entries from factor data: 1.2% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
Dropped 2.3% entries from factor data: 2.3% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
Dropped 0.4% entries from factor data: 0.4% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
Dropped 0.4% entries from factor data: 0.4% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).
max_loss is 35.0%, not exceeded: OK!
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Quantile-Analysis">Quantile Analysis<a class="anchor-link" href="#Quantile-Analysis">&#182;</a></h2><h3 id="Factor-Returns">Factor Returns<a class="anchor-link" href="#Factor-Returns">&#182;</a></h3><p>Let's view the factor returns over time. We should be seeing it generally move up and to the right.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[33]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">ls_factor_returns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">()</span>

<span class="k">for</span> <span class="n">factor</span><span class="p">,</span> <span class="n">factor_data</span> <span class="ow">in</span> <span class="n">clean_factor_data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
    <span class="n">ls_factor_returns</span><span class="p">[</span><span class="n">factor</span><span class="p">]</span> <span class="o">=</span> <span class="n">al</span><span class="o">.</span><span class="n">performance</span><span class="o">.</span><span class="n">factor_returns</span><span class="p">(</span><span class="n">factor_data</span><span class="p">)</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span>

<span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">ls_factor_returns</span><span class="p">)</span><span class="o">.</span><span class="n">cumprod</span><span class="p">()</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[33]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54e2ce6ef0&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="Basis-Points-Per-Day-per-Quantile">Basis Points Per Day per Quantile<a class="anchor-link" href="#Basis-Points-Per-Day-per-Quantile">&#182;</a></h3><p>It is not enough to look just at the factor weighted return. A good alpha is also monotonic in quantiles. Let's looks the basis points for the factor returns.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[34]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">qr_factor_returns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">()</span>

<span class="k">for</span> <span class="n">factor</span><span class="p">,</span> <span class="n">factor_data</span> <span class="ow">in</span> <span class="n">unixt_factor_data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
    <span class="n">qr_factor_returns</span><span class="p">[</span><span class="n">factor</span><span class="p">]</span> <span class="o">=</span> <span class="n">al</span><span class="o">.</span><span class="n">performance</span><span class="o">.</span><span class="n">mean_return_by_quantile</span><span class="p">(</span><span class="n">factor_data</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span>

<span class="p">(</span><span class="mi">10000</span><span class="o">*</span><span class="n">qr_factor_returns</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span>
    <span class="n">subplots</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
    <span class="n">sharey</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
    <span class="n">layout</span><span class="o">=</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span>
    <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">14</span><span class="p">),</span>
    <span class="n">legend</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[34]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([[&lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2d43320&gt;,
        &lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2cdfd68&gt;],
       [&lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2c00f60&gt;,
        &lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2bb6c88&gt;],
       [&lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2d2ccf8&gt;,
        &lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2d2cbe0&gt;],
       [&lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2be0400&gt;,
        &lt;matplotlib.axes._subplots.AxesSubplot object at 0x7f54e2b9dfd0&gt;]],
      dtype=object)</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>What do you observe?</p>
<ul>
<li>None of these alphas are <strong>strictly monotonic</strong>; this should lead you to question why this is? Further research and refinement of the alphas needs to be done. What is it about these alphas that leads to the highest ranking stocks in all alphas except MR 5D smoothed to <em>not</em> perform the best.</li>
<li>The majority of the return is coming from the <strong>short side</strong> in all these alphas. The negative return in quintile 1 is very large in all alphas. This could also a cause for concern becuase when you short stocks, you need to locate the short; shorts can be expensive or not available at all.</li>
<li>If you look at the magnitude of the return spread (i.e., Q1 minus Q5), we are working with daily returns in the 0.03%, i.e., <strong>3 basis points</strong>, neighborhood <em>before all transaction costs, shorting costs, etc.</em>. Assuming 252 days in a year, that's 7.56% return annualized. Transaction costs may cut this in half. As such, it should be clear that these alphas can only survive in an institutional setting and that leverage will likely need to be applied in order to achieve an attractive return.</li>
</ul>
<h2 id="Turnover-Analysis">Turnover Analysis<a class="anchor-link" href="#Turnover-Analysis">&#182;</a></h2><p>Without doing a full and formal backtest, we can analyze how stable the alphas are over time. Stability in this sense means that from period to period, the alpha ranks do not change much. Since trading is costly, we always prefer, all other things being equal, that the ranks do not change significantly per period. We can measure this with the <strong>factor rank autocorrelation (FRA)</strong>.</p>
<p><a href="https://quantopian.github.io/alphalens/alphalens.html?highlight=factor_rank_autocorrelation#alphalens.performance.factor_rank_autocorrelation">alphalens.performance.factor_rank_autocorrelation</a></p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[35]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">ls_FRA</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">()</span>

<span class="k">for</span> <span class="n">factor</span><span class="p">,</span> <span class="n">factor_data</span> <span class="ow">in</span> <span class="n">unixt_factor_data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
    <span class="n">ls_FRA</span><span class="p">[</span><span class="n">factor</span><span class="p">]</span> <span class="o">=</span> <span class="n">al</span><span class="o">.</span><span class="n">performance</span><span class="o">.</span><span class="n">factor_rank_autocorrelation</span><span class="p">(</span><span class="n">factor_data</span><span class="p">)</span>

<span class="n">ls_FRA</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s2">&quot;Factor Rank Autocorrelation&quot;</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[35]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54e29e94e0&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Sharpe-Ratio-of-the-Alphas">Sharpe Ratio of the Alphas<a class="anchor-link" href="#Sharpe-Ratio-of-the-Alphas">&#182;</a></h2><p>The last analysis we'll do on the factors will be sharpe ratio. Implement <code>sharpe_ratio</code> to calculate the sharpe ratio of factor returns.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[36]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">sharpe_ratio</span><span class="p">(</span><span class="n">factor_returns</span><span class="p">,</span> <span class="n">annualization_factor</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Get the sharpe ratio for each factor for the entire period</span>

<span class="sd">    Parameters</span>
<span class="sd">    ----------</span>
<span class="sd">    factor_returns : DataFrame</span>
<span class="sd">        Factor returns for each factor and date</span>
<span class="sd">    annualization_factor: float</span>
<span class="sd">        Annualization Factor</span>

<span class="sd">    Returns</span>
<span class="sd">    -------</span>
<span class="sd">    sharpe_ratio : Pandas Series of floats</span>
<span class="sd">        Sharpe ratio</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">return</span> <span class="n">annualization_factor</span> <span class="o">*</span> <span class="n">factor_returns</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span> <span class="o">/</span> <span class="n">factor_returns</span><span class="o">.</span><span class="n">std</span><span class="p">()</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_sharpe_ratio</span><span class="p">(</span><span class="n">sharpe_ratio</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>Let's see what the sharpe ratio for the factors are. Generally, a Sharpe Ratio of near 1.0 or higher is an acceptable single alpha for this universe.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[37]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">daily_annualization_factor</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">252</span><span class="p">)</span>
<span class="n">sharpe_ratio</span><span class="p">(</span><span class="n">ls_factor_returns</span><span class="p">,</span> <span class="n">daily_annualization_factor</span><span class="p">)</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[37]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>Mean_Reversion_5Day_Sector_Neutral            1.37000000
Mean_Reversion_5Day_Sector_Neutral_Smoothed   1.27000000
Momentum_1YR                                  1.13000000
Overnight_Sentiment                           0.12000000
Overnight_Sentiment_Smoothed                  0.45000000
dtype: float64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Question:-What-do-you-think-would-happen-if-we-smooth-the-momentum-factor?-Would-the-performance-increase,-decrease,-or-no-major-change?-Why?">Question: What do you think would happen if we smooth the momentum factor? Would the performance increase, decrease, or no major change? Why?<a class="anchor-link" href="#Question:-What-do-you-think-would-happen-if-we-smooth-the-momentum-factor?-Would-the-performance-increase,-decrease,-or-no-major-change?-Why?">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>Answer:</strong></p>
<p>The _Momentum<em>1YR</em> <a href="#Turnover-Analysis">FRA (Factor Rank Autocorrelation)</a> plot is relatively flat with values ranging at or just below 1.0. 
If we smooth the momentum factor, the performance will not change significantly since it is already low and flat. Further smoothing won't lower the amount of trading costs.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="The-Combined-Alpha-Vector">The Combined Alpha Vector<a class="anchor-link" href="#The-Combined-Alpha-Vector">&#182;</a></h2><p>To use these alphas in a portfolio, we need to combine them somehow so we get a single score per stock. This is a area where machine learning can be very helpful. In this module, however, we will take the simplest approach of combination: simply averaging the scores from each alpha.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[38]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">selected_factors</span> <span class="o">=</span> <span class="n">all_factors</span><span class="o">.</span><span class="n">columns</span><span class="p">[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">]]</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Selected Factors: </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">selected_factors</span><span class="p">)))</span>

<span class="n">all_factors</span><span class="p">[</span><span class="s1">&#39;alpha_vector&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">all_factors</span><span class="p">[</span><span class="n">selected_factors</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">alphas</span> <span class="o">=</span> <span class="n">all_factors</span><span class="p">[[</span><span class="s1">&#39;alpha_vector&#39;</span><span class="p">]]</span>
<span class="n">alpha_vector</span> <span class="o">=</span> <span class="n">alphas</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">all_factors</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">get_level_values</span><span class="p">(</span><span class="mi">0</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span>
<span class="n">alpha_vector</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Selected Factors: Mean_Reversion_5Day_Sector_Neutral_Smoothed, Momentum_1YR, Overnight_Sentiment_Smoothed
</pre>
</div>
</div>

<div class="output_area">

    <div class="prompt output_prompt">Out[38]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>alpha_vector</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Equity(0 [A])</th>
      <td>-0.58642457</td>
    </tr>
    <tr>
      <th>Equity(1 [AAL])</th>
      <td>-0.45333845</td>
    </tr>
    <tr>
      <th>Equity(2 [AAP])</th>
      <td>-0.69993898</td>
    </tr>
    <tr>
      <th>Equity(3 [AAPL])</th>
      <td>-0.06790952</td>
    </tr>
    <tr>
      <th>Equity(4 [ABBV])</th>
      <td>-1.21617871</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Optimal-Portfolio-Constrained-by-Risk-Model">Optimal Portfolio Constrained by Risk Model<a class="anchor-link" href="#Optimal-Portfolio-Constrained-by-Risk-Model">&#182;</a></h1><p>You have an alpha model and a risk model. Let's find a portfolio that trades as close as possible to the alpha model but limiting risk as measured by the risk model. You'll be building thie optimizer for this portfolio. To help you out. we have provided you with an abstract class called <code>AbstractOptimalHoldings</code>.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[39]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">abc</span> <span class="k">import</span> <span class="n">ABC</span><span class="p">,</span> <span class="n">abstractmethod</span>


<span class="k">class</span> <span class="nc">AbstractOptimalHoldings</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span>    
    <span class="nd">@abstractmethod</span>
    <span class="k">def</span> <span class="nf">_get_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the objective function</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        alpha_vector : DataFrame</span>
<span class="sd">            Alpha vector</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        objective : CVXPY Objective</span>
<span class="sd">            Objective function</span>
<span class="sd">        &quot;&quot;&quot;</span>
        
        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
    
    <span class="nd">@abstractmethod</span>
    <span class="k">def</span> <span class="nf">_get_constraints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">risk</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the constraints</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        factor_betas : 2 dimensional Ndarray</span>
<span class="sd">            Factor betas</span>
<span class="sd">        risk: CVXPY Atom</span>
<span class="sd">            Predicted variance of the portfolio returns</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        constraints : List of CVXPY Constraint</span>
<span class="sd">            Constraints</span>
<span class="sd">        &quot;&quot;&quot;</span>
        
        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
        
    <span class="k">def</span> <span class="nf">_get_risk</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">alpha_vector_index</span><span class="p">,</span> <span class="n">factor_cov_matrix</span><span class="p">,</span> <span class="n">idiosyncratic_var_vector</span><span class="p">):</span>
        <span class="n">f</span> <span class="o">=</span> <span class="n">factor_betas</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">alpha_vector_index</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">T</span> <span class="o">*</span> <span class="n">weights</span>
        <span class="n">X</span> <span class="o">=</span> <span class="n">factor_cov_matrix</span>
        <span class="n">S</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">diag</span><span class="p">(</span><span class="n">idiosyncratic_var_vector</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">alpha_vector_index</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">flatten</span><span class="p">())</span>

        <span class="k">return</span> <span class="n">cvx</span><span class="o">.</span><span class="n">quad_form</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">X</span><span class="p">)</span> <span class="o">+</span> <span class="n">cvx</span><span class="o">.</span><span class="n">quad_form</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="n">S</span><span class="p">)</span>
    
    <span class="k">def</span> <span class="nf">find</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">factor_cov_matrix</span><span class="p">,</span> <span class="n">idiosyncratic_var_vector</span><span class="p">):</span>
        <span class="n">weights</span> <span class="o">=</span> <span class="n">cvx</span><span class="o">.</span><span class="n">Variable</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">alpha_vector</span><span class="p">))</span>
        <span class="n">risk</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_risk</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">factor_cov_matrix</span><span class="p">,</span> <span class="n">idiosyncratic_var_vector</span><span class="p">)</span>
        
        <span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_obj</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">)</span>
        <span class="n">constraints</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_constraints</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="n">factor_betas</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="p">,</span> <span class="n">risk</span><span class="p">)</span>
        
        <span class="n">prob</span> <span class="o">=</span> <span class="n">cvx</span><span class="o">.</span><span class="n">Problem</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">constraints</span><span class="p">)</span>
        <span class="n">prob</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">max_iters</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>

        <span class="n">optimal_weights</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">(</span><span class="n">weights</span><span class="o">.</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
        
        <span class="k">return</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">optimal_weights</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Objective-and-Constraints">Objective and Constraints<a class="anchor-link" href="#Objective-and-Constraints">&#182;</a></h2><p>Using this class as a base class, you'll implement the <code>OptimalHoldings</code> class. There's two functions that need to be implemented in this class, the <code>_get_obj</code> and <code>_get_constraints</code> functions.</p>
<p>The <code>_get_obj</code> function should return an CVXPY objective function that maximizes $ \alpha^T * x \\ $, where $ x $ is the portfolio weights and $ \alpha $ is the alpha vector.</p>
<p>The <code>_get_constraints</code> function should return a list of the following constraints:</p>
<ul>
<li>$ r \leq risk_{\text{cap}}^2 \\ $</li>
<li>$ B^T * x \preceq factor_{\text{max}} \\ $</li>
<li>$ B^T * x \succeq factor_{\text{min}} \\ $</li>
<li>$ x^T\mathbb{1} = 0 \\ $</li>
<li>$ \|x\|_1 \leq 1 \\ $</li>
<li>$ x \succeq weights_{\text{min}} \\ $</li>
<li>$ x \preceq weights_{\text{max}} $</li>
</ul>
<p>Where $ x $ is the portfolio weights, $ B $ is the factor betas, and $ r $ is the portfolio risk</p>
<p>The first constraint is that the predicted risk be less than some maximum limit. The second and third constraints are on the maximum and minimum portfolio factor exposures. The fourth constraint is the "market neutral constraint: the sum of the weights must be zero. The fifth constraint is the leverage constraint: the sum of the absolute value of the weights must be less than or equal to 1.0. The last are some minimum and maximum limits on individual holdings.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[40]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">class</span> <span class="nc">OptimalHoldings</span><span class="p">(</span><span class="n">AbstractOptimalHoldings</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">_get_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the objective function</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        alpha_vector : DataFrame</span>
<span class="sd">            Alpha vector</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        objective : CVXPY Objective</span>
<span class="sd">            Objective function</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">cvx</span><span class="o">.</span><span class="n">Minimize</span><span class="p">(</span><span class="o">-</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">T</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">weights</span><span class="p">)</span>
    
    <span class="k">def</span> <span class="nf">_get_constraints</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">factor_betas</span><span class="p">,</span> <span class="n">risk</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the constraints</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        factor_betas : 2 dimensional Ndarray</span>
<span class="sd">            Factor betas</span>
<span class="sd">        risk: CVXPY Atom</span>
<span class="sd">            Predicted variance of the portfolio returns</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        constraints : List of CVXPY Constraint</span>
<span class="sd">            Constraints</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">factor_betas</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="p">[</span>
            <span class="n">risk</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">risk_cap</span> <span class="o">**</span> <span class="mi">2</span><span class="p">,</span>
            <span class="n">factor_betas</span><span class="o">.</span><span class="n">T</span> <span class="o">*</span> <span class="n">weights</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factor_max</span><span class="p">,</span>
            <span class="n">factor_betas</span><span class="o">.</span><span class="n">T</span> <span class="o">*</span> <span class="n">weights</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factor_min</span><span class="p">,</span>
            <span class="nb">sum</span><span class="p">(</span><span class="n">weights</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span>
            <span class="nb">sum</span><span class="p">(</span><span class="n">cvx</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">weights</span><span class="p">))</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">,</span>
            <span class="n">weights</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">weights_min</span><span class="p">,</span>
            <span class="n">weights</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">weights_max</span>
        <span class="p">]</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">risk_cap</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">factor_max</span><span class="o">=</span><span class="mf">10.0</span><span class="p">,</span> <span class="n">factor_min</span><span class="o">=-</span><span class="mf">10.0</span><span class="p">,</span> <span class="n">weights_max</span><span class="o">=</span><span class="mf">0.55</span><span class="p">,</span> <span class="n">weights_min</span><span class="o">=-</span><span class="mf">0.55</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">risk_cap</span><span class="o">=</span><span class="n">risk_cap</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">factor_max</span><span class="o">=</span><span class="n">factor_max</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">factor_min</span><span class="o">=</span><span class="n">factor_min</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">weights_max</span><span class="o">=</span><span class="n">weights_max</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">weights_min</span><span class="o">=</span><span class="n">weights_min</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_optimal_holdings_get_obj</span><span class="p">(</span><span class="n">OptimalHoldings</span><span class="p">)</span>
<span class="n">project_tests</span><span class="o">.</span><span class="n">test_optimal_holdings_get_constraints</span><span class="p">(</span><span class="n">OptimalHoldings</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Running Integration Test on Problem.solve:
&gt; constaints = [sum(weights) == 0.0, sum(cvx.abs(weights)) &lt;= 1.0]
&gt; obj = optimal_holdings._get_obj(weights, alpha_vector)
&gt; prob = cvx.Problem(obj, constaints)
&gt; prob.solve(max_iters=500)
&gt; solution = np.asarray(weights.value).flatten()

Tests Passed

Running Integration Test on Problem.solve:
&gt; x = np.diag(np.arange(3))
&gt; s = np.diag(np.arange(4))
&gt; factor_betas = np.arange(4 * 3).reshape([4, 3])
&gt; risk = cvx.quad_form(weights * factor_betas, x) + cvx.quad_form(weights, s)
&gt; constaints = optimal_holdings._get_constraints(weights, factor_betas, risk)
&gt; obj = cvx.Maximize([0, 1, 5, -1] * weights)
&gt; prob = cvx.Problem(obj, constaints)
&gt; prob.solve(max_iters=500)
&gt; solution = np.asarray(weights.value).flatten()

Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3><p>With the <code>OptimalHoldings</code> class implemented, let's see the weights it generates.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[45]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">optimal_weights</span> <span class="o">=</span> <span class="n">OptimalHoldings</span><span class="p">()</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">alpha_vector</span><span class="p">,</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_vector&#39;</span><span class="p">])</span>

<span class="n">optimal_weights</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio % Holdings by Stock&#39;</span><span class="p">)</span>
<span class="n">x_axis</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axes</span><span class="p">()</span><span class="o">.</span><span class="n">get_xaxis</span><span class="p">()</span>
<span class="n">x_axis</span><span class="o">.</span><span class="n">set_visible</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/opt/conda/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:106: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
  warnings.warn(message, mplDeprecation, stacklevel=1)
</pre>
</div>
</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Yikes. It put most of the weight in a few stocks.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[42]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">project_helper</span><span class="o">.</span><span class="n">get_factor_exposures</span><span class="p">(</span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">optimal_weights</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span>
    <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio Net Factor Exposures&#39;</span><span class="p">,</span>
    <span class="n">legend</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[42]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54e23f1160&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Optimize-with-a-Regularization-Parameter">Optimize with a Regularization Parameter<a class="anchor-link" href="#Optimize-with-a-Regularization-Parameter">&#182;</a></h2><p>In order to enforce diversification, we'll use regularization in the objective function. We'll create a new class called <code>OptimalHoldingsRegualization</code> which gets its constraints from the <code>OptimalHoldings</code> class. In this new class, implement the <code>_get_obj</code> function to return a CVXPY objective function that maximize $ \alpha^T * x + \lambda\|x\|_2\\ $, where $ x $ is the portfolio weights, $ \alpha $ is the alpha vector, and $ \lambda $ is the regularization parameter.</p>
<p><strong>Note:</strong> <em> $ \lambda $ is located in <code>self.lambda_reg</code>. </em></p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[48]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">class</span> <span class="nc">OptimalHoldingsRegualization</span><span class="p">(</span><span class="n">OptimalHoldings</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">_get_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the objective function</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        alpha_vector : DataFrame</span>
<span class="sd">            Alpha vector</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        objective : CVXPY Objective</span>
<span class="sd">            Objective function</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="k">return</span> <span class="n">cvx</span><span class="o">.</span><span class="n">Minimize</span><span class="p">(</span><span class="o">-</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">T</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">weights</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">lambda_reg</span> <span class="o">*</span> <span class="n">cvx</span><span class="o">.</span><span class="n">pnorm</span><span class="p">(</span><span class="n">weights</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
    
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lambda_reg</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="n">risk_cap</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">factor_max</span><span class="o">=</span><span class="mf">10.0</span><span class="p">,</span> <span class="n">factor_min</span><span class="o">=-</span><span class="mf">10.0</span><span class="p">,</span> <span class="n">weights_max</span><span class="o">=</span><span class="mf">0.55</span><span class="p">,</span> <span class="n">weights_min</span><span class="o">=-</span><span class="mf">0.55</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">lambda_reg</span> <span class="o">=</span> <span class="n">lambda_reg</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">risk_cap</span><span class="o">=</span><span class="n">risk_cap</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">factor_max</span><span class="o">=</span><span class="n">factor_max</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">factor_min</span><span class="o">=</span><span class="n">factor_min</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">weights_max</span><span class="o">=</span><span class="n">weights_max</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">weights_min</span><span class="o">=</span><span class="n">weights_min</span>
        

<span class="n">project_tests</span><span class="o">.</span><span class="n">test_optimal_holdings_regualization_get_obj</span><span class="p">(</span><span class="n">OptimalHoldingsRegualization</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Running Integration Test on Problem.solve:
&gt; constaints = [sum(weights) == 0.0, sum(cvx.abs(weights)) &lt;= 1.0]
&gt; obj = optimal_holdings_regualization._get_obj(weights, alpha_vector)
&gt; prob = cvx.Problem(obj, constaints)
&gt; prob.solve(max_iters=500)
&gt; solution = np.asarray(weights.value).flatten()

Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[49]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">optimal_weights_1</span> <span class="o">=</span> <span class="n">OptimalHoldingsRegualization</span><span class="p">(</span><span class="n">lambda_reg</span><span class="o">=</span><span class="mf">5.0</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">alpha_vector</span><span class="p">,</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_vector&#39;</span><span class="p">])</span>

<span class="n">optimal_weights_1</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio % Holdings by Stock&#39;</span><span class="p">)</span>
<span class="n">x_axis</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axes</span><span class="p">()</span><span class="o">.</span><span class="n">get_xaxis</span><span class="p">()</span>
<span class="n">x_axis</span><span class="o">.</span><span class="n">set_visible</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/opt/conda/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:106: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
  warnings.warn(message, mplDeprecation, stacklevel=1)
</pre>
</div>
</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Nice. Well diversified.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[50]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">project_helper</span><span class="o">.</span><span class="n">get_factor_exposures</span><span class="p">(</span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">optimal_weights_1</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span>
    <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio Net Factor Exposures&#39;</span><span class="p">,</span>
    <span class="n">legend</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[50]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54e03214e0&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Optimize-with-a-Strict-Factor-Constraints-and-Target-Weighting">Optimize with a Strict Factor Constraints and Target Weighting<a class="anchor-link" href="#Optimize-with-a-Strict-Factor-Constraints-and-Target-Weighting">&#182;</a></h2><p>Another common formulation is to take a predefined target weighting, $x^*$ (e.g., a quantile portfolio), and solve to get as close to that portfolio while respecting portfolio-level constraints. For this next class, <code>OptimalHoldingsStrictFactor</code>, you'll implement the <code>_get_obj</code> function to minimize on on $ \|x - x^*\|_2 $, where $ x $ is the portfolio weights  $ x^* $ is the target weighting.</p>

</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[51]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">class</span> <span class="nc">OptimalHoldingsStrictFactor</span><span class="p">(</span><span class="n">OptimalHoldings</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">_get_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">weights</span><span class="p">,</span> <span class="n">alpha_vector</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Get the objective function</span>

<span class="sd">        Parameters</span>
<span class="sd">        ----------</span>
<span class="sd">        weights : CVXPY Variable</span>
<span class="sd">            Portfolio weights</span>
<span class="sd">        alpha_vector : DataFrame</span>
<span class="sd">            Alpha vector</span>

<span class="sd">        Returns</span>
<span class="sd">        -------</span>
<span class="sd">        objective : CVXPY Objective</span>
<span class="sd">            Objective function</span>
<span class="sd">        &quot;&quot;&quot;</span>
        <span class="k">assert</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">alpha_vector</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span>
        
        <span class="n">alpha_vec_vals</span> <span class="o">=</span> <span class="n">alpha_vector</span><span class="o">.</span><span class="n">values</span><span class="p">[:,</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">x_star</span> <span class="o">=</span> <span class="p">(</span><span class="n">alpha_vec_vals</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">alpha_vec_vals</span><span class="p">))</span> <span class="o">/</span> <span class="nb">sum</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">alpha_vec_vals</span><span class="p">))</span>
        <span class="k">return</span> <span class="n">cvx</span><span class="o">.</span><span class="n">Minimize</span><span class="p">(</span><span class="n">cvx</span><span class="o">.</span><span class="n">pnorm</span><span class="p">(</span><span class="n">weights</span><span class="o">-</span><span class="n">x_star</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>


<span class="n">project_tests</span><span class="o">.</span><span class="n">test_optimal_holdings_strict_factor_get_obj</span><span class="p">(</span><span class="n">OptimalHoldingsStrictFactor</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Running Integration Test on Problem.solve:
&gt; constaints = [sum(weights) == 0.0, sum(cvx.abs(weights)) &lt;= 1.0]
&gt; obj = optimal_holdings_strict_factor._get_obj(weights, alpha_vector)
&gt; prob = cvx.Problem(obj, constaints)
&gt; prob.solve(max_iters=500)
&gt; solution = np.asarray(weights.value).flatten()

Tests Passed
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="View-Data">View Data<a class="anchor-link" href="#View-Data">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[52]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">optimal_weights_2</span> <span class="o">=</span> <span class="n">OptimalHoldingsStrictFactor</span><span class="p">(</span>
    <span class="n">weights_max</span><span class="o">=</span><span class="mf">0.02</span><span class="p">,</span>
    <span class="n">weights_min</span><span class="o">=-</span><span class="mf">0.02</span><span class="p">,</span>
    <span class="n">risk_cap</span><span class="o">=</span><span class="mf">0.0015</span><span class="p">,</span>
    <span class="n">factor_max</span><span class="o">=</span><span class="mf">0.015</span><span class="p">,</span>
    <span class="n">factor_min</span><span class="o">=-</span><span class="mf">0.015</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">alpha_vector</span><span class="p">,</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_cov_matrix&#39;</span><span class="p">],</span> <span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;idiosyncratic_var_vector&#39;</span><span class="p">])</span>

<span class="n">optimal_weights_2</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">legend</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio % Holdings by Stock&#39;</span><span class="p">)</span>
<span class="n">x_axis</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axes</span><span class="p">()</span><span class="o">.</span><span class="n">get_xaxis</span><span class="p">()</span>
<span class="n">x_axis</span><span class="o">.</span><span class="n">set_visible</span><span class="p">(</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/opt/conda/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:106: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
  warnings.warn(message, mplDeprecation, stacklevel=1)
</pre>
</div>
</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[53]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">project_helper</span><span class="o">.</span><span class="n">get_factor_exposures</span><span class="p">(</span><span class="n">risk_model</span><span class="p">[</span><span class="s1">&#39;factor_betas&#39;</span><span class="p">],</span> <span class="n">optimal_weights_2</span><span class="p">)</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span>
    <span class="n">title</span><span class="o">=</span><span class="s1">&#39;Portfolio Net Factor Exposures&#39;</span><span class="p">,</span>
    <span class="n">legend</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

    </div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

    <div class="prompt output_prompt">Out[53]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f54dfb46b70&gt;</pre>
</div>

</div>

<div class="output_area">

    <div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Submission">Submission<a class="anchor-link" href="#Submission">&#182;</a></h2><p>Now that you're done with the project, it's time to submit it. Click the submit button in the bottom right. One of our reviewers will give you feedback on your project with a pass or not passed grade. You can continue to the next section while you wait for feedback.</p>

</div>
</div>
</div>
    </div>
  </div>
</body>

 


</html>
